我将 NGINX 配置为这样作为 http 请求的反向代理:
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;
}
}
答案1
这ssh协议不基于 HTTP,因此无法通过常规代理进行代理proxy_pass
的ngx_http_proxy_module
然而,最近,从nginx1.9.0(2016-04-26 与 1.10.0 一起稳定发布),nginx 确实获得了支持TCP流代理,这意味着如果您有足够新的 nginx 版本,实际上您可以使用它代理 ssh 连接(但是,请注意,您无法将类似的内容添加X-Real-IP
到代理连接中,因为这不基于 HTTP)。
有关更多信息和示例,请查看:
答案2
从Nginx版本1.9.0开始,NGINX支持ngx_stream_core_module模块,应该使用--with-stream启用它。启用流模块后,可以通过 TCP 代理进行 ssh 协议。
stream {
upstream ssh {
server 192.168.1.12:22;
}
server {
listen 12345;
proxy_pass ssh;
}
}
https://www.nginx.com/resources/admin-guide/tcp-load-balancing/