nginx权重配置必须写在upstream块内server指令后,如server 10.0.0.1:8080 weight=4;权重为正整数,影响请求概率分布而非精确计数,需配合max_fails、backup等参数及nginx -t校验后reload生效。

权重设置本身不直接提升单个请求的响应速度,但它能显著改善整体请求分发的合理性,从而间接优化系统响应质量——关键在于让更强的机器多干活、更稳的节点少分压、故障节点及时隔离。
权重必须写在 upstream 的 server 行里
weight 参数只在 upstream 块内生效,且必须紧接在 server 地址之后。它不是独立指令,也不能出现在 location 或 proxy_pass 附近:
- ✅ 正确写法:
upstream backend { server 10.0.0.1:8080 weight=4; } - ❌ 错误写法:
server 10.0.0.1:8080; weight=4;(语法错误) - ❌ 错误写法:
location / { proxy_pass http://backend; weight=2; }(Nginx 启动报 unknown directive)
权重影响的是请求概率分布,不是精确计数
设两台后端权重为 3 和 1,理论比例是 3:1,但实际中前几次请求可能全打到权重高的那台——这是正常行为。Nginx 不做请求计数器式调度,真实比例需在数百次以上请求中统计才趋近预期值。
这意味着:小流量场景下别依赖权重“精准分流”,而应关注长期负载均衡效果和节点健康状态。
权重要配合状态标记才真正可用
单独调 weight 解决不了运维实际问题。必须和 backup、down、max_fails 等组合使用:
-
server 10.0.0.2:8080 weight=3 backup;—— 仅当所有非 backup 节点不可用时启用 -
server 10.0.0.3:8080 down;—— 强制摘除,不参与任何调度(含健康检查) -
server 10.0.0.4:8080 weight=2 max_fails=2 fail_timeout=30s;—— 失败2次后停用30秒,权重高的节点恢复后更快重新纳入流量
注意:backup 节点不参与 ip_hash 的哈希计算,但在 round_robin 中仍计入权重分配逻辑(只是默认不启用)。
改完权重必须先验证再重载
最常见事故是改完配置直接 reload,结果 nginx -s reload 失败,worker 进程退出,整个代理中断:
- 永远先运行
nginx -t,看到test is successful再执行nginx -s reload - weight 值只能是正整数(如 1、5、10),负数、小数或字符串会导致
invalid number of the "weight" parameter - 修改后建议用
curl -I http://your-vip/快速验证是否返回 200,再查后端 access_log 确认流量分发是否符合预期











