如何配置NGINX作为不同端口号的反向代理?

如何配置NGINX作为不同端口号的反向代理?

我将 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_passngx_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/

相关内容