nginx四层代理原理

2022-06-23 14:32:57 浏览数 (1)

nginx一般使用七层代理也就是http应用层代理,可以反向代理和负载均衡。但是项目要使用长连接,此时内网服务器肯定不能暴漏,还是需要接入层网关进行转发,一般有使用lvs,lvs专门用作四层代理和负载均衡基于内核态,并发量很大。但是lvs配置相对复杂,我们的这个项目长连接数不会太多,所以不需要使用lvs。就直接使用nginx的四层代理,nginx的四层代理需要使用nginx的stream模块在编译的时候需要编译进去,在nginx.conf文件中配置如下:

代码语言:javascript复制
stream {                                           #stram模块 和http模块是一同等
级;做四层代理时需要添加上这个模块;
      server {
          listen 9000;                          #9000端口将以4层TCP协议方式转发
至后端app_sever;
          proxy_pass app_server;
      }
      upstream app_server{
          server 192.168.0.110:9000;
      }
}

比如后端app应用的长连接ip端口是192.168.0.110:9000,nginx也使用9000端口作为长连接端口,则客户端需要连接nginx的9000端口,然后发送报文到nginx,nginx再转发给192.168.0.110:9000后端应用,转发原理是nginx作为客户端去和192.168.0.110:9000的后端应用建立长连接,然后将报文发送给192.168.0.110:9000

可以看到客户端每发送一个长连接到nginx,nginx作为客户端都发起socket连接到后端服务,这样肯定会占用更多的文件描述符。

0 人点赞