Nginx TCP负载均衡需启用stream模块,配置upstream组与server监听规则,支持轮询、least_conn、IP哈希等算法及权重、健康检查等参数,适用于MySQL、Redis等四层转发场景。

要在 Nginx 的 TCP 代理环境下实现多主机负载均衡转发,核心是启用 stream 模块并正确配置上游组(upstream)与监听服务。TCP 层负载均衡不解析应用层内容,只做四层转发,适用于 MySQL、Redis、自定义 TCP 服务等场景。
确认 stream 模块已启用
Nginx 默认不编译 stream 模块,需验证是否支持:
- 运行
nginx -V 2>&1 | grep -o with-stream,输出含with-stream表示已启用 - 若无,需重新编译 Nginx 并添加
--with-stream参数,或使用官方预编译包(如 nginx-plus 或较新发行版的 nginx-full)
定义 upstream 组并指定后端主机
在 nginx.conf 的顶层(与 http 同级)添加 stream 块,列出所有 TCP 后端服务节点:
- 每个
server行写明 IP 和端口,支持weight、max_conns、backup、down等参数 - 可设置健康检查(需配合
health_check指令,要求 Nginx 版本 ≥1.11.5) - 示例:
stream {
upstream mysql_cluster {
server 10.186.2.95:3306 weight=3;
server 10.186.2.96:3306 weight=1;
server 10.186.2.97:3306 backup;
}
}
配置监听与代理规则
在 stream 块内定义 server,绑定监听端口并关联 upstream:
-
listen指定对外暴露的端口(如 3307),可加so_keepalive保活长连接 -
proxy_pass直接指向 upstream 名称,不带协议前缀(如http://) - 支持超时控制:
proxy_timeout、proxy_responses等 - 示例:
server {
listen 3307;
proxy_pass mysql_cluster;
proxy_timeout 1s;
}
选择合适的负载策略
TCP 负载均衡默认轮询,也可显式指定算法:
-
least_conn:分发到当前连接数最少的后端(适合长连接场景) -
hash $remote_addr consistent:基于客户端 IP 做一致性哈希,保证同一客户端始终落到同一节点(适合有状态服务) -
ip_hash(仅限 stream 模块 ≥1.19.0):简单 IP 哈希,注意 IPv6 需额外处理 - 权重(
weight)和健康状态(max_fails/fail_timeout)在 TCP 场景下同样生效,但需搭配主动健康检查才更可靠


















