Nginx upstream 权重配置是异构服务器下最直接有效的资源分配方式,需定义在 http 块内、用 weight=正整数设置比例,proxy_pass 必须引用 upstream 名称并带 http:// 前缀,配合 max_fails/fail_timeout 实现健康检查,backup/down 等参数增强调度灵活性,但不可与 ip_hash 等 hash 算法混用。

在异构服务器环境下,用 Nginx 的 upstream 配置权重是最直接有效的资源分配方式。核心是让性能强的机器多扛流量,性能弱的少分请求,避免“一刀切”轮询导致部分节点过载、其余闲置。
权重配置必须写在 http 块内
upstream 块不能放在 server 或 location 里,必须定义在 http{} 范围下,且位于所有 server 块之外。否则 Nginx 启动会报错或权重不生效。
- 每个
server行后紧跟weight=数值,数值为正整数,默认是 1 - 权重不需归一化,Nginx 自动按比例计算:某节点流量占比 = 该节点 weight ÷ 所有 weight 总和
- 例如:
server 192.168.1.10:8080 weight=5;、server 192.168.1.11:8080 weight=2;、server 192.168.1.12:8080 weight=1;→ 三者分别承担约 62.5%、25%、12.5% 的请求
proxy_pass 必须引用 upstream 名称
在 server 的 location 中使用 proxy_pass 时,地址格式必须是 http://upstream_name(注意 http:// 前缀),不能写成具体 IP+端口,否则权重完全失效,退化为普通代理。
- 正确写法:
proxy_pass http://my_backend; - 错误写法:
proxy_pass http://192.168.1.10:8080;或proxy_pass my_backend;(缺协议头) - 建议同时设置
proxy_set_header Host $host;和X-Real-IP,保留原始请求信息
搭配 max_fails 和 fail_timeout 提升容错能力
仅设权重无法应对临时故障。加上健康检查参数,能让 Nginx 主动屏蔽异常节点,防止请求持续打到已挂服务上。
-
max_fails=2:连续 2 次连接失败(如超时、拒绝连接),就标记该节点为不可用 -
fail_timeout=30s:进入不可用状态后,30 秒内不再转发请求给它;30 秒后自动重试一次,成功则恢复 - 可为不同节点设不同值,比如主力机设
max_fails=3 fail_timeout=45s,备用机更敏感些
特殊状态标识增强调度灵活性
除了 weight,还可以叠加其他 server 参数来细化行为:
-
backup:仅当所有非 backup 节点都不可用时才启用,适合灾备机器 -
down:手动下线该节点,不参与任何调度(常用于维护期) - 注意:
ip_hash或hash $request_uri等 hash 类算法与weight冲突,不能共存;若需会话保持,应改用 cookie 透传等替代方案


















