Nginx后端权重必须在upstream块内server指令中用weight=参数指定,仅对round_robin和ip_hash生效;权重为正整数,默认1,设0表示不参与轮询但接受健康检查。

直接在 Nginx 的 upstream 块中为每台后端服务器设置 weight 值,是最简单也最有效的解决方式。它不依赖外部组件,启动即生效,关键是把“性能差异”转化为可配置的整数比例。
weight 配置必须写在正确位置
权重只能定义在 http{} 块内、所有 server 块之外的 upstream 中。写在 location 或 server 里会报错或完全失效。
- ✅ 正确:
http { upstream my_backend { server 192.168.1.10:8080 weight=5; } server { location / { proxy_pass http://my_backend; } } } - ❌ 错误:
server { upstream {...} }或location { upstream {...} } - ❌ 错误:
proxy_pass http://192.168.1.10:8080;(绕过 upstream,weight 彻底无效)
weight 数值要反映真实能力差异
weight 不是百分比,也不是绝对性能分,而是相对比例。设得合理,才能避免旧机打满、新机空转。
- 以最强节点为基准(如设
weight=10),其余按估算能力折算:若旧机处理能力约为新机的 40%,就设weight=4 - 避免用太小的数(如
1和2),微小误差会导致实际流量偏差放大;推荐统一放大 10 倍,比如10:4:2比5:2:1更易调准 - 上线前最好实测:用
wrk对单台后端压测相同并发下的 QPS,直接按 QPS 比例设 weight,结果最可靠
仅设 weight 不够,必须搭配健康检查
权重只管“正常时怎么分”,不管“出问题了怎么办”。没有健康检查,一台机器响应变慢甚至假死,请求仍会持续打过去。
- 加
max_fails=2 fail_timeout=30s:连续 2 次失败(超时/拒绝连接)就标记为不可用,30 秒内不再转发 - 对关键节点可差异化设置:主力机设
max_fails=3 fail_timeout=45s,备用机更敏感些 - 慎用
ip_hash:它和 weight 冲突,无法共存;如需会话保持,改用 cookie 透传或一致性哈希
特殊状态标识让调度更灵活
除了 weight,还可以叠加其他参数细化行为,适应运维节奏。
-
backup:仅当所有非 backup 节点都不可用时才启用,适合灾备机器 -
down:手动下线该节点,不参与任何调度,常用于计划内维护 -
slow_start=30s:对刚恢复或新加入的服务器,30 秒内逐步提升流量,防止冷启动冲击










