权重参数是调节后端节点负载分配的杠杆,需在upstream块server指令中正确定义,按能力相对值设置,并配合健康检查与动态调权实现精细化容量管理。

权重参数不是扩容开关,而是让已有后端资源“各尽其力”的调节杠杆。它不增加物理能力,但能让强节点多扛压、弱节点少分担,避免闲置与过载并存,从而在不加机器的前提下提升集群整体吞吐和稳定性。
权重必须写对位置才生效
weight 只能在 upstream 块内的 server 指令中定义,且紧贴 IP 和端口之后:
- ✅ 正确写法:
server 10.0.0.1:8080 weight=4; - ❌ 错误写法:把 weight 单独成行、写在 location 或 proxy_pass 后、设为小数或负数——这些都会导致
nginx -t报错 - weight 默认值为 1;设为 0 表示该节点不参与轮询,但仍接受健康检查探测
- 仅对 round_robin(默认)和 ip_hash 生效;第三方负载算法如 fair、url_hash 不识别该参数
按真实能力设相对值,而非拍脑袋
权重是比例关系,不是百分比,也不是性能绝对值。关键看节点间处理能力的相对差距:
- 建议先做压测:对每台后端用相同接口发起 1000 QPS、持续 2 分钟,记录平均响应时间和错误率
- 若某节点 P95 延迟是其他节点的 2 倍,权重可设为一半(如其他为 6,它设为 3)
- 避免极端比例(如 100 vs 1),否则小权重节点长期空闲,失去冗余价值
- 三台节点权重为 5、3、2,意味着每 10 个请求中分别分配 5、3、2 个——这是长周期统计结果,少量请求下不保证严格按比
配合状态标记与健康检查,支撑真实运维场景
单靠 weight 无法应对维护、升级、故障等复杂情况,需组合使用:
- 临时下线用
down:server 192.168.1.10:8080 down;—— 彻底摘除,不参与调度也不探测 - 冷启动或降级用
weight=0:server 192.168.1.11:8080 weight=0;—— 不分发请求,但仍在健康检查范围内 - 关键业务配
backup:server 192.168.1.12:8080 backup;—— 主集群全挂时才启用 - 搭配
max_fails=2 fail_timeout=15s,自动剔除短时异常节点,与权重形成协同保护
从静态到动态,让权重随运行状态自适应
静态权重适合稳定环境,但真实集群常有波动。动态调权才能真正精细管理容量:
- 开源 Nginx 本身不支持运行时改 weight,需借助外部机制:用脚本采集
$upstream_response_time日志,按 P95 延迟自动升降权重,再nginx -s reload - OpenResty + Lua 方案:在
balancer_by_lua_block中读共享字典指标,毫秒级选节点,支持熔断(连续超时则临时权为 0) - 云原生推荐 nginx-upsync-module + Consul/etcd:Nginx 每 300ms 拉取 JSON 节点列表(含 weight 字段),变更即生效,天然支持 fallback 权重
- 无论哪种方式,都要确保 access_log 固定记录
$upstream_addr $upstream_response_time,这是调权的数据基础


















