nginx TCP 和 UDP 负载平衡
- 自 version 1.9.0 以来新增了 ngx_stream_core_module 模块,使 nginx 支持四层负载均衡。这个模块不仅能实现 TCP 和 UDP 转发,还能支持负载均衡 upstream 配置。默认编译的时候该模块并未编译进去,需要编译的时候添加 --with-stream 参数使其支持 stream 代理。
- 由于协议的不同,UDP 转发仅会将请求包转发至目标,UDP 回复包将由目标机器直接发出给你的请求端。这个回复包是不会经过转发端的,所以在你转发目标端 IP 已经被不明设备给屏蔽无法连接的话,这个 UDP 回复包你还是收不到,这并不是 Nginx 的问题。
- 请注意,stream 配置不能放到 http 内,因为stream是通过tcp层转发,而不是 http 转发
使用Nginx实现TCP反向代理
-
下图是 nginx upstream keepalive 长连接的实现原理。首先每个进程需要一个 connection pool,里面都是长连接,多进程之间是不需要共享这个连接池的。 一旦与后端服务器建立连接,则在当前请求连接结束之后不会立即关闭连接,而是把用完的连接保存在一个 keepalive connection pool 里面,以后每次需要建立向后连接的时候,只需要从这个连接池里面找。
-
如果找到合适的连接的话,就可以直接来用这个连接,不需要重新创建 socket 或者发起 conne