Nginx权重调控本质是加权轮询下按性能差异分配流量,需搭配健康检查、限流及容错机制协同生效,禁用ip_hash以确保权重生效。

在高并发环境下,Nginx 通过权重(weight)调控流量,本质是让性能更强的后端承担更多请求,而非平均分配。它不改变并发能力本身,而是优化请求分发逻辑,避免弱节点过载、强节点闲置——这是高并发系统稳定运行的关键一环。
权重配置必须基于加权轮询模式
weight 参数只在默认的加权轮询(weighted round-robin)策略下生效。只要 upstream 块中未显式启用 ip_hash、least_conn 或其他算法,就自动启用该模式。
- 写法示例:
server 10.0.1.10:8080 weight=6;、server 10.0.1.11:8080 weight=2;、server 10.0.1.12:8080 weight=2;→ 实际流量比约为 60% : 20% : 20% - 未声明 weight 的服务器默认为 1,例如三台服务器分别设为
weight=4、weight=1、未写 weight,等效于 4:1:1 -
weight=0表示临时摘除,不参与调度,也不触发健康检查
权重必须搭配健康检查才真正可靠
高并发下后端故障概率上升,仅靠静态权重无法自愈。Nginx 依赖 max_fails 和 fail_timeout 实现被动健康检查,让失效节点自动退出权重计算。
- 推荐统一写法:
server 10.0.1.10:8080 weight=5 max_fails=2 fail_timeout=30s; - 当某台权重为 2 的服务器连续失败 2 次,30 秒内被标记为 down,剩余节点按新权重比例重新归一化承接全部流量
- 切勿单独调大 weight 而忽略健康阈值——否则故障节点仍会持续接收请求,加剧雪崩风险
验证效果不能只看配置,要盯日志比例
理论权重比 ≠ 实际流量比。高并发场景下需用真实请求验证是否收敛到预期分布。
- 在后端 access log 中添加
$upstream_addr或自定义 header(如X-Upstream),记录实际转发目标 - 发起数百至数千次请求(可用 ab、wrk 或简单 for 循环 curl),统计各节点日志条数
- 观察比例是否趋近设定权重比(例如 weight=3:1:1 应接近 60% : 20% : 20%,允许 ±5% 波动)
权重与其他机制协同使用更有效
单纯权重解决的是“分多少”,而高并发还需解决“能不能分”和“分得稳不稳”。
- 配合
limit_req防止单 IP 突发打爆某台高权重点:例如对登录路径限流,避免权重高的认证服务被暴力探测拖垮 - 配合
proxy_next_upstream提升容错:设置error timeout http_500 http_502,当高权重点返回错误时自动重试下一节点 - 避免与
ip_hash同时启用——后者强制绑定 IP 到固定后端,weight 完全失效


















