权重配置是让后端服务器按真实处理能力承担负载,避免强机闲置、弱机过载;必须在upstream块内server指令中紧贴ip和端口设置,仅对round_robin和ip_hash生效,需结合延迟、稳定性等综合调优。

权重配置不是给服务器“多分流量”,而是让每台后端承担与其真实处理能力匹配的负载,从而避免强机闲置、弱机过载。它不提升单机性能,但能显著改善集群整体吞吐和响应稳定性。
权重必须写对位置才生效
weight 参数只能出现在 upstream 块内的 server 指令中,且紧贴 IP 和端口之后:
- ✅ 正确写法:
server 10.0.0.1:8080 weight=3; - ❌ 错误写法:把 weight 写在 location 或 proxy_pass 后;或拆成单独一行;或设为小数、负数、字符串——这些都会导致
nginx -t报错 - weight 仅对
round_robin(默认)和ip_hash生效;第三方算法如fair、url_hash不识别该参数 - 默认值为 1;设为 0 表示不参与轮询,但仍接受健康检查探测
按真实能力设定静态权重
不能只看 CPU 或内存空闲率拍脑袋定值,应结合响应时间、网络延迟与稳定性综合判断:
- 用
$upstream_response_time和$request_time日志字段统计各节点 P95 延迟,延迟低的可适当提高权重 - 若某节点 RTT 为 1.2ms,另一台为 4.1ms,归一化后可设权重为 5 和 1,而非简单按倒数取整
- 权重不是精确比例控制器:weight=3 和 weight=1 的两台机器,在少量请求下可能连续打到同一台,属正常行为;真实分流效果需在数百次以上请求中观察
配合健康检查与 least_conn 提升实效性
单纯权重无法应对瞬时异常或长连接堆积,需叠加容错与动态调度机制:
- 为每个 server 添加
max_fails=2 fail_timeout=15s,短时高延迟或失败会自动临时剔除,与权重形成协同保护 - 在 upstream 中加入
least_conn(注意:不可与ip_hash共存),尤其适用于文件上传、报表生成等耗时请求场景,避免某节点因连接未释放而持续排队 - 配合
proxy_next_upstream error timeout http_500 http_502 http_503 http_504,请求失败时自动转给下一个加权节点,保障整体可用性
灰度上线与持续调优
权重不是一次配置就永久有效的,应随节点状态变化动态调整:
- 新节点上线初期建议设较低 weight(如 1),观察日志和监控指标(响应时间、错误率、连接数)再逐步提升
- 扩容或硬件升级后,及时重估并更新权重,避免旧配置拖累集群表现
- 可通过对比后端 access 日志中的请求数,验证实际分流是否接近理论比例(如 weight=4:2:1 → 约 57% : 29% : 14%)











