在大型项目四层负载有LVS,但在中小型项目或者内部有很多应用需要做TCP四层基于端口转,以前我们采用Socat,后面也尝试使用iptables来做四层的端口转发,同样HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,但由于其配置相对复杂,在实际生产项目中还是以Nginx为主,
Nginx1.9的推出不使用使之支持HTTP2.0,另外一上更加让人兴奋的就是默认支持TCP端口的四层负载均衡能力,话多多说直接看实例代码
server { listen 127.0.0.1:12345; #监听端口 proxy_pass 192.168.1.22:8080; #转发到后端端口 }
看上面栗子,是不是觉得做端口转发配置特别简单
参考地址:http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html
server { ... deny 192.168.1.1; allow 192.168.1.0/24; allow 10.1.1.0/16; deny all; }
在上面的栗子基础上,增加一访问限制,和HTTP的一模一样也
参考地址:http://nginx.org/en/docs/stream/ngx_stream_access_module.html
worker_processes auto; error_log /var/log/nginx/error.log info; events { worker_connections 1024; } stream { upstream backend { server 192.168.1.22:12345; server 192.168.1.23:12345; } server { listen 12345; proxy_pass backend; } }
来一上完整的栗子,这是一上带伏在均衡的栗子哦,看了是不是特别激动,会Http反向代理的,看这代码毫无压力
如需要更加强大的东西可 以参考:
http://nginx.org/en/docs/stream/ngx_stream_core_module.html
server { listen 12345; proxy_connect_timeout 1s; proxy_timeout 1m; proxy_pass example.com:12345; } server { listen [::1]:12345; proxy_pass unix:/tmp/stream.socket; }
如上栗子,不光支持TCP/IP V4,还支持V6哦(不过暂时也用不上),并且还可以对连接的时效做一些限制,比起以前用过的iptables和socat端口转发强大太多了,并且还很容易理解.
上参考路径:http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html
upstream backend { hash $remote_addr consistent; server backend1.example.com:12345 weight=5; server backend2.example.com:12345; server unix:/tmp/backend3; server backup1.example.com:12345 backup; server backup2.example.com:12345 backup; } server { listen 12346; proxy_pass backend; }
等等,还没完,Nginx还有更加强大的就是对我产的转发源也可以进行简单明了的设置,基本沿用了Nginx http反向代理的配置方法主风格,简直太喜欢.
http://nginx.org/en/docs/stream/ngx_stream_upstream_module.html
最后用上Nginx,妈妈再也不用担心复杂架构,各种异构应用使用各种奇葩的七层协议及端口呢!