#linux #docker #nginx #networking #nginx-reverse-proxy
Вопрос:
Я все еще новичок в nginx и хочу этого добиться.
У меня есть два сервера (server1 и server2) с сервером sftp (bitvise) на server1. А на сервере 2 у меня запущен контейнер nginx docker.
Я хочу настроить nginx так , чтобы, когда трафик поступает на сервер2 (тот, у которого есть nginx) на порту 22, он перенаправлялся на сервер1, где присутствует мой sftp-сервер.
У меня есть dns «transfer.test.com» сопоставлен с моим общедоступным IP-адресом server2 (протестирован).
Это конфигурация, которую я добавил в файл nginx conf.
server {
listen 22;
server_name transfer.test.com;
return 301 https://google.com;
location / {
set $sftp server1-private-ip:22;
proxy_pass $sftp;
}
}
server1-private-ip-это частный IP сервера 1 (с sftp).
но до сих пор это не работает. Я могу подключиться к sftp с помощью filezile, используя частный IP-адрес server1, НО я не могу подключиться к sftp с помощью filezila, используя частный IP-адрес server2, это означает, что трафик не перенаправляется.
Спасибо вам за помощь.
Ответ №1:
Если вы хотите использовать nginx в качестве прокси-сервера для протоколов, отличных от HTTP, таких как SSH или SFTP, вам следует определить свой сервер в контексте потока, а не http. Типичный основной файл конфигурации (обычно /etc/nginx/nginx.conf
) выглядит следующим образом
user <username>;
worker_processes <number>;
...
events {
worker_connections <number>;
}
http {
include /etc/nginx/mime.types;
... # other global http directives here
include /etc/nginx/conf.d/*.conf;
}
Как вы можете видеть, файлы конфигурации для отдельных серверов (или групп серверов) включаются в http
контекст. Вы должны добавить stream
блок в свой основной файл конфигурации:
user <username>;
worker_processes <number>;
...
events {
worker_connections <number>;
}
http {
...
}
stream {
server {
listen 22;
proxy_pass <server1_private_ip>:22;
}
}
Директивы типа server_name
или location
бессмысленны в server
блоках, определенных в stream
контексте. Пожалуйста, обратите внимание, что для использования вышеуказанной конфигурации nginx должен быть дополнен ngx_stream_core_module
ngx_stream_proxy_module
модулями и.
Комментарии:
1. Я добавил эту трансляцию { сервер { слушать 22; набор $SFTP в ЮЖД-сервером nginx:80 ; директива proxy_pass $протоколу SFTP; } } в моем файле nginx.conf файл, под HTTP{} но когда я локон transfer.test.com я не могу получить nginx и страница приветствия, ЮЖД-с nginx:80 откуда ЮЖД-nginx-это местные nginx в докер контейнере
2. и я даже пытался транслировать { сервер { слушайте 22; proxy_pass <server1_private_ip>:22; } } но все равно, когда я пытаюсь подключиться к server2_private_ip:22 из filezilla, это не работает Спасибо за вашу помощь
3. Что
nginx -t
говорит команда?4. после добавления этого
stream { server { listen 22; set $sftp <server1-private-ip>:22; proxy_pass $sftp; } }
nginx -t говорит :nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
5. файл конфигурации nginx, похоже, в порядке. Извините, я не знаю, как помочь дальше. Я не очень хорошо знаком с сетями докеров.