nginx 流量调度需以实测吞吐设 weight 为能力标尺,叠加健康检查、least_conn 和 max_conns 等运行时保障机制,并通过 rps、rt、错误率及日志统计验证实际倾斜效果。

想让 Nginx 把更多流量导向高性能服务器,核心不是“调高 weight 就完事”,而是用 weight 做能力标尺,再叠加运行时保障机制,防止高权重点被压垮。
按实测吞吐设权重,别只看 CPU 核数
权重要反映真实处理能力,不是硬件参数的简单映射。例如:
- 对每台后端单独压测(如
wrk -t4 -c200 -d30s http://server/health),记录稳定 QPS 和 P95 延迟 - 取一台均衡节点为基准(比如 QPS=1000,P95=60ms),其他节点按比例换算:若 A 节点 QPS=2400 → weight=24;B 节点 QPS=800 → weight=8
- 统一缩放到 1–10 区间(如 24:8 → 简化为 3:1),便于后续调整和排查
必须配健康检查,否则高权重等于加速雪崩
没有故障隔离,weight 再准也白搭。每个 server 行都要显式加:
-
max_fails=3:连续 3 次超时或 5xx 就标记为不可用 -
fail_timeout=30s:30 秒内不转发请求,之后自动试探恢复 - 关键业务建议启用主动健康检查(如
health_check interval=3 fails=2 passes=2),定期发 HEAD 请求验证服务可用性
长连接或响应时间差异大时,光靠 weight 不够
高权重点可能正卡在慢请求上,但轮询仍持续派发新请求。此时需补充调度逻辑:
- 启用
least_conn:优先选当前活跃连接最少的节点,适合报表导出、模型推理等长耗时场景 - 搭配
max_conns=1024:限制单机最大并发连接数,防止单点被打穿 - 注意:
least_conn与weight共存时,Nginx 先按权重分组,再在同权重组内选连接最少者
上线后验证是否真倾斜到位
不能只看配置写了多少,要看后端实际水位:
- 对比各节点 RPS(每秒请求数)与权重比是否接近(如 weight=3:1,RPS 应在 3:1 ±15% 范围内)
- 监控高权重点的平均响应时间和错误率——若它 RT 显著更高或 5xx 更多,说明已过载,不是权重不够,而是应用或资源瓶颈
- 用
log_format记录$upstream_addr,通过日志统计实际分发分布(数百请求以上才具统计意义)











