Nginx不仅可以在TCP/IP的七层进行反向代理,实现根据location进行灵活的转发。还可以对四层网络协议进行代理,实现一个隧道功能,代替Haproxy。比如客户端需要请求内网服务,这个时候可以对一个具有公网IP并且和内网服务器能互通的Nginx服务器进行配置,在Nginx服务器上配置一个其他端口(不能和目标端口一样),将请求该端口的客户端转发到内网的服务器上。该功能依赖于ngx_stream_core_module。 下面是配置示例: stream { #定义stream,类似nginx的upstream #定义了一个ssh的代理 upstream ssh_proxy { hash $remote_addr consistent; server 192.168.1.100:22; } #定义了一个mysql的代理 upstream mysql_proxy { hash $remote_addr consistent; server 192.168.1.100:3306; } #引用代理 server { listen 6666; #这个端口是nginx的代理端口 proxy_connect_timeout 10s; proxy_timeout 30s; proxy_pass ssh_proxy; #将访问nginx_ip:6666的请求代理到ssh_proxy这个upstream里的server地址 } server { listen 7777; proxy_connect_timeout 10s; proxy_timeout 30s; proxy_pass mysql_proxy; } } 启动Nginx后就会监听6666端口,这个时候客户端访问6666端口会跳转到后端服务器的22端口,使用MySQL客户端工具去连接Nginx服务器7777端口也会跳转到后端3306端口。 ssh -p 6666 root@222.121.1.47