nginx tcp层负载均衡由stream模块实现,调度发生在连接建立阶段,不解析应用层;支持轮询(默认)、least_conn(适合长连接)、ip哈希(保障会话粘性)、加权轮询(适配异构服务器),并依赖max_fails、proxy_connect_timeout等参数控制健康检查与连接生命周期。

Nginx 在 TCP 层做代理时,负载均衡调度发生在传输层,不解析应用层数据,靠 stream 模块实现。它的调度逻辑直接作用于连接建立阶段,核心是合理分发新连接,同时兼顾长连接场景下的资源平衡。
TCP 代理的负载均衡算法选择
Nginx stream 模块支持多种调度策略,每种适用于不同连接模式和后端特征:
- 轮询(默认):按顺序把新连接分配给后端,适合短连接、性能均一的服务
- 最少连接(
least_conn):优先选当前活跃连接数最少的节点,更适合数据库、游戏等长连接服务 - IP 哈希(
hash $remote_addr):确保同一客户端 IP 总连到同一后端,适用于需会话粘性的 TCP 场景(如某些自定义协议) - 加权轮询(
weight=):为异构服务器分配不同处理比例,比如旧机器设weight=1,新机器设weight=3
连接级调度的关键参数
TCP 是面向连接的协议,Nginx 的调度决策在 accept() 后、proxy_pass 前完成,以下参数直接影响分发效果:
-
max_fails和fail_timeout:配合健康检查,自动剔除无法建立 TCP 连接的后端 -
proxy_connect_timeout:控制与后端建连的等待上限,建议设为 1–3 秒,避免阻塞新连接接入 -
proxy_timeout:维持空闲连接的时间,防止中间网络设备(如云防火墙)主动断连 -
proxy_responses 1:对单请求单响应类协议(如 MySQL 协议),可启用响应计数机制辅助连接管理
真实流量下的调度表现差异
- 短连接密集型(如高频 HTTP API 封装在 TCP 上):轮询或加权轮询更公平,连接创建快、释放快
- 长连接主导型(如 Redis、MySQL 客户端复用连接):
least_conn更能反映真实负载,避免某台后端堆积数百空闲但未关闭的连接 - 客户端 IP 固定且数量有限(如内网服务调用方集中):
hash $remote_addr可减少后端状态同步开销,但要注意哈希倾斜问题
注意:没有“实时 CPU 或响应时间反馈”
Nginx stream 不采集后端指标(如延迟、CPU),所有调度都是静态或连接数维度的。若需基于响应性能动态调权,需依赖 Nginx Plus 的 API 或外部监控系统联动配置热重载。











