nginx集群中权重分配的核心是将节点实际能力转化为可配置的整数比例,使强机多分、弱机少分;weight必须置于upstream内server指令后且为正整数,需配合max_fails/fail_timeout健康检查及reload生效。

权重必须写在 upstream 的 server 行里
weight 参数只在 upstream 块内生效,且必须紧跟在 IP 和端口之后:
✅ 正确:server 192.168.1.10:8080 weight=5;
❌ 错误:写在 location 或 proxy_pass 后面;绕过 upstream 直接 proxy_pass 到 IP;设为小数、负数或字符串——这些都会导致 nginx -t 报错或完全不生效。
按真实能力设权,不是拍脑袋
权重是相对比例,不是百分比,也不是性能绝对分:
• 以最强节点为基准(如设 weight=10),其余按实测能力折算:旧机 QPS 是新机的 40%,就设 weight=4
• 推荐统一放大数值(如 10:4:2),避免用太小的数(如 1 和 2),微小误差会放大实际偏差
• 上线前建议压测:用 wrk 对每台后端发起相同并发,按实测 QPS 比例设权,结果最可靠
权重要配合健康机制才真正可靠
weight 只管“正常时怎么分”,不管“出问题了怎么办”:
• 每个 server 行加上 max_fails=2 fail_timeout=30s:连续失败两次,暂停转发 30 秒
• 故障期间,剩余健康节点会按各自权重重新归一化分担流量(原 5:3:2,C 下线后 A/B 变成 5:3)
• 新节点上线用 slow_start=30s,让流量从 0 缓慢爬升,防冷启动冲击
• weight=0 可临时下线节点,且不触发健康检查,适合维护窗口期
别踩常见坑,权重才不白配
• 不能和 ip_hash 共存:启用 ip_hash 后,weight 完全失效;如需会话保持,改用 cookie 透传或一致性哈希
• 修改后必须 reload:weight 不支持热生效,改完要执行 nginx -s reload
• 权重不是动态负载感知:它解决的是“这台机器能扛多少”,不是“现在忙不忙”;长期稳态部署很合适,但突发劣化需靠健康检查兜底
• 别忽略代理层配置:proxy_buffering、keepalive 连接复用、超时设置不合理,会抵消权重优化效果











