I have NGINX configured like this as a reverse proxy for http requests:
server {
listen 80;
server_name 203.0.113.2;
proxy_set_header X-Real-IP $remote_addr; # pass on real client IP
location / {
proxy_pass http://203.0.113.1:3000;
}
}
Я также хочу прокси ssh (порт 22) запросов. Могу ли я добавить еще один блок сервера, например, в тот же файл конфигурации:
server {
listen 22;
server_name 203.0.113.2;
proxy_set_header X-Real-IP $remote_addr; # pass on real client IP
location / {
proxy_pass http://203.0.113.1:22;
}
}
Так что конечный результат таков:
server {
listen 80;
server_name 203.0.113.2;
proxy_set_header X-Real-IP $remote_addr; # pass on real client IP
location / {
proxy_pass http://203.0.113.1:3000;
}
}
server {
listen 22;
server_name 203.0.113.2;
proxy_set_header X-Real-IP $remote_addr; # pass on real client IP
location / {
proxy_pass http://203.0.113.1:22;
}
}
ТИА,
Оле
nginx
действует какhttp
прокси. Если вы установите для него обратный прокси-порт 22, он не позволит вам передавать трафик SSH - толькоhttp
трафик на сервер SSH, который, очевидно, потерпит неудачу.Ответы:
Протокол SSH не основан на HTTP, и, как таковые, не может быть проксированным через регулярные
proxy_pass
изngx_http_proxy_module
Однако недавно, начиная с nginx 1.9.0 (выпущен как стабильный с 1.10.0 на 2016-04-26), nginx получил поддержку для прокси TCP-потока , что означает, что если у вас достаточно свежая версия nginx, вы можете подключиться к нему через ssh-прокси (однако учтите, что вы не сможете добавить что-либо подобное
X-Real-IP
прокси-соединению, поскольку оно не основано на HTTP).Для получения дополнительной информации и примеров, посмотрите на:
источник
Начиная с Nginx версии 1.9.0, NGINX поддерживает модуль ngx_stream_core_module, его следует включить с помощью --with-stream. Когда потоковый модуль включен, они могут использовать протокол ssh по протоколу tcp.
https://www.nginx.com/resources/admin-guide/tcp-load-balancing/
источник
ssh me@srv1.my.net
иssh me@srv2.my.net
- это было бы здорово. Это ограничение протокола (SSH не выдаст DNS-имя, используемое клиентом)srv1
и 222 дляsrv2
), либо используя вложенные сеансы ssh, где вы сначала вводите ssh на общедоступный сервер / IP, и оттуда, сш в листья; например,ssh user@example.org 'ssh user@192.168.5.1'
.HOST
заголовок, так что легко определить , на какой сайт он нацелен ... Вложенные SSH-сессии - своего рода решение, но грязное - это работает, хотя. В конечном итоге у меня были разные порты в нашей пограничной сети - старый добрый NAT как самое ПОЛЕЗНОЕ и надежное решение.