权重配置是Nginx实现按能分配流量、避免单点过载的核心手段,需依硬件能力设静态权重(如16C32G配weight=4、8C16G配weight=2),仅在加权轮询或least_conn下生效,须配合健康检查与弹性扩缩容策略,并规避ip_hash冲突、作用域错误等常见陷阱。

权重配置不是简单填个数字,而是让 Nginx 懂得“按能分配”。它直接决定流量如何在异构服务器间合理倾斜,是实现平滑伸缩、避免单点过载的核心手段。
根据硬件能力设定静态权重
服务器性能不一致时,轮询会把同样多的请求分给弱机和强机,造成资源浪费甚至雪崩。权重应反映真实处理能力比值:
- 用 CPU 核心数 × 内存容量(GB)粗估相对算力,例如 16C32G 与 8C16G 的比值约为 2:1,对应 weight=4 和 weight=2
- 避免使用整数倍以外的随意值(如 weight=7 或 13),易导致调度抖动;推荐用 1/2/4/8 等幂次或 1/2/3/5 等小质数组合
- 权重只在同一种算法下生效:加权轮询(默认)、加权最少连接(least_conn)都支持,但 ip_hash 下 weight 会被忽略
配合健康检查动态调节流量
权重固定不变,但服务器状态实时变化。必须用健康检查机制让 Nginx 主动规避故障节点,否则权重再合理也无意义:
- 每台 server 后明确写 max_fails=3 fail_timeout=30s,表示连续 3 次超时或返回 5xx 即剔除,30 秒后尝试恢复
- 在 location 块中启用 proxy_next_upstream error timeout http_500 http_502 http_503 http_504,让一次失败立即重试下一节点
- 若用 Nginx Plus,可用 health_check interval=5s uri=/health; 实现主动探测,比被动检查更早发现僵死进程
支撑弹性扩缩容的操作节奏
加权重不是为了一劳永逸,而是为扩容缩容提供缓冲窗口:
- 新增机器初期设低权重(如 weight=1),观察日志和响应延迟稳定后再逐步调高
- 下线旧机前先将 weight 设为 0,Nginx 仍保留在 upstream 列表中但不转发请求,确认无流量后再移除配置
- 灰度发布时,可建两个 upstream:blue(weight=10)和 green(weight=1),通过 rewrite 或 map 控制分流比例
避免常见权重误用陷阱
几个看似微小却常导致策略失效的配置错误:
- ip_hash 和 weight 同时出现在一个 upstream 块里——ip_hash 会强制忽略所有 weight 设置
- upstream 被错误放在 server 块内部,导致无法被多个 location 复用,也影响健康检查作用域
- 域名形式的 server(如 backend.example.com)未加 resolve 参数,DNS 变更后 Nginx 不自动刷新 IP,权重持续作用于已下线地址



















