Nginx四层负载均衡需启用stream模块,工作在传输层,仅基于IP和端口转发,低延迟高吞吐,适用于数据库、Redis等长连接场景;配置须与http块同级,支持least_conn、IP哈希等算法及PROXY协议透传。

要让 Nginx 支持四层(TCP/UDP)负载均衡,核心就是启用并正确使用 stream 模块。它不处理 HTTP 头、URL 或 Cookie,只基于 IP 和端口做连接转发,因此延迟低、吞吐高,特别适合数据库、Redis、游戏服务等长连接场景。
确认 stream 模块是否已启用
Nginx 默认编译通常不包含 stream 模块,必须显式开启。验证方式很简单:
- 运行
nginx -V 2>&1 | grep -o with-stream,若输出with-stream,说明已支持 - 若无输出,需重新编译 Nginx,并在 configure 阶段加上
--with-stream参数 - 注意:不能仅靠安装包判断——有些发行版预编译版本仍可能禁用该模块
配置结构必须独立于 http 块
stream 配置不能写在 http{...} 里面,必须和 http、events 同级,放在顶层上下文中:
- 主配置文件(如
/etc/nginx/nginx.conf)中,stream{...}应与events并列 - 推荐做法是把具体规则拆到单独文件,例如
include /etc/nginx/stream.d/*.conf; - 否则 Nginx 启动时会报错:“unknown directive ‘stream’”
基础负载均衡配置要点
一个可用的 MySQL 四层代理示例包含三部分:定义上游组、设置监听、配置代理行为:
-
upstream中可设weight控制流量比例,用backup标记备用节点,down临时下线某台 -
server块里listen指定对外暴露的端口(如63306),避免与后端 MySQL 端口冲突 - 关键代理参数:
proxy_connect_timeout控制建连超时,proxy_timeout决定空闲连接保持时间(建议设为1h适配数据库长连接)
调度算法与高级特性
stream 模块支持多种分发策略,按需选择:
-
least_conn:优先发给当前活跃连接最少的后端,适合连接生命周期长的服务 -
hash $remote_addr consistent:客户端 IP 一致性哈希,保证同一 IP 总打到同一台后端(需会话粘性时用) -
random:简单随机,适合后端能力均一且无状态的场景 - PROXY 协议支持:
proxy_protocol on可透传原始客户端 IP,但要求后端服务能解析该协议(如 MySQL 需搭配中间件或新版支持)











