nginx权重分配需基于后端真实处理能力,设相对weight值(如4:2:1),默认为1,weight=0临时下线;建议1–100范围,配合least_conn应对长连接,启用被动健康检查(max_fails/fail_timeout)和proxy_next_upstream重试,并通过灰度调优与可观测性持续验证。

权重分配不是简单设个数字,而是让 Nginx 的流量分发更贴合后端真实处理能力。它不依赖实时监控指标,靠的是合理设定 + 协同机制 + 持续验证。
按硬件能力设相对权重
weight 值代表节点间的相对处理能力,不是百分比,也不是绝对性能值。比如新服务器 CPU 核心数是旧服务器的 2 倍、内存翻倍,那 weight 可设为 2:1;若三台机器性能比约为 4:2:1,就对应设 weight=4、weight=2、weight=1。这样长期来看,请求比例会趋近这个比值。
- 未声明 weight 的节点,默认为 1
- weight=0 表示临时下线,不参与分发
- 建议把 weight 控制在 1–100 范围内,方便团队协作和后续调整
搭配 least_conn 应对长连接场景
纯加权轮询在处理耗时请求(如文件上传、导出报表)时容易导致某节点连接堆积。加上 least_conn 后,Nginx 会优先把新请求派给当前活跃连接最少的节点,同时仍尊重 weight 的长期倾向。
- 在 upstream 块开头加 least_conn; 即可启用
- 注意:不能和 ip_hash 共存,二者互斥
- 适合 WebSocket、HTTP/2 长连接或响应时间波动较大的服务
用被动健康检查保权重有效性
再高的 weight,如果节点不可用或响应慢,也只会拖累整体。Nginx 默认有被动健康检查机制,但需显式配置才能真正起作用:
- 每个 server 行加上 max_fails=3 fail_timeout=30s,表示连续失败 3 次后,30 秒内不再派发请求
- 在 location 或 upstream 外层加 proxy_next_upstream error timeout http_500–504,让失败请求自动重试下一个可用节点
- 这样即使高权重点短暂异常,流量也会自然倾斜,避免“权重越高越卡”的反效果
灰度调优与可观测验证
权重不是上线就固定不变的。生产环境推荐“小步调、可观测、快反馈”节奏:
- 首次调整建议用倍数关系微调,比如 weight 从 2→4,而不是 2→10
- 上线后盯紧 5–10 分钟:各节点请求数、P95 响应时间、5xx 错误率
- 用 log_format 加入 $upstream_addr 和 $upstream_response_time,方便定位哪台机器实际承接了请求及耗时
- 压测或扩容后,结合监控数据(CPU、RT、错误率)再决定是否继续调高 weight











