nginx权重应按真实算力比值设定,推荐用“cpu核心数×内存容量(gb)”粗估,结合i/o差异微调为小整数比例;必须配合健康检查,且weight=0可临时下线节点。

Nginx 权重不是拍脑袋填的数字,而是让流量按真实处理能力倾斜的标尺。硬件差异越大,越不能靠默认轮询——否则弱机很快被打满,强机却空转。
用算力比值定权重,别只看单个指标
CPU、内存、磁盘 I/O 共同决定实际吞吐能力。建议用「CPU 核心数 × 内存容量(GB)」粗估相对算力:
- 16C32G → 16 × 32 = 512
- 8C16G → 8 × 16 = 128
- 比值约 4:1,对应 weight=4 和 weight=1
若还有 SSD vs HDD、NVMe 延迟差异,可微调:I/O 明显更强的机器,weight 可上浮 0.5–1 级(如从 4→5)。但避免小数——Nginx 只接受正整数,所以用整数比例表达即可,比如 5:1 或 8:2(效果等价)。
权重值要小而准,别堆大数字
- 推荐用 1/2/3/4/5 或 1/2/4/8 这类小整数
- 避免 weight=7、13、37 等质数以外的随意值,容易导致调度抖动
- 不写 weight,默认为 1;weight=0 表示临时下线,不参与分发也不触发健康检查
必须配合健康检查,否则权重失效
权重只在节点健康时起作用。一旦某台因 max_fails 被标记为不可用,它的 weight 就暂停生效,剩余节点会按各自权重重新归一化分担流量。例如:
- A(weight=5)、B(weight=3)、C(weight=2),总权重 10 → 分配比 50% : 30% : 20%
- 若 C 故障,A 和 B 按 5:3(即 62.5% : 37.5%)承接全部流量
所以每个 server 后应明确写:
- max_fails=3 fail_timeout=30s
- 在 location 中启用 proxy_next_upstream error timeout http_500–504
扩容缩容时权重要动态调,不是设完就不管
- 新机器上线初期设低权重(如 weight=1),观察响应延迟和错误率稳定后再逐步加到目标值
- 下线旧机前先设 weight=0,确认无请求打过去再移除配置
- 灰度发布可用两个 upstream:blue(weight=10) 和 green(weight=1),通过 map 或 rewrite 控制分流
注意:ip_hash 和 weight 不能共存,前者会强制忽略后者;upstream 必须定义在 http 块内、server 块外,否则健康检查可能失效。











