nginx的weight参数通过在upstream中为server设置无量纲整数权重,实现按比例(如3:1:2)分发流量以适配异构硬件;需结合cpu、内存、i/o及实测qps合理设定,并搭配max_fails、slow_start、backup等提升高可用性。

在多台后端服务器硬件性能不一致时,直接使用默认轮询会导致高性能机器空转、低性能机器过载。Nginx 的 weight 参数正是为解决这个问题而设——它让流量按权重比例分发,实现更合理的资源利用。
weight 基本用法与配置位置
weight 只能用在 upstream 块中的 server 指令里,单位是无量纲整数(默认为 1)。数值越大,该服务器接收的请求越多。例如:
upstream backend {
server 192.168.1.10:8080 weight=3;
server 192.168.1.11:8080 weight=1;
server 192.168.1.12:8080 weight=2;
}
这个配置下,三台服务器接收到的请求比例约为 3:1:2,即 50%、16.7%、33.3%。
如何合理设置 weight 值
weight 不是随意拍定的数字,应基于实际服务能力估算。推荐参考以下维度:
- CPU 核心数:双路 16 核服务器可设为 32,单路 4 核设为 4
- 内存容量:若某节点内存翻倍且应用内存敏感,weight 可相应提高
- 磁盘 I/O 能力:SSD 服务器比 HDD 服务器可提升 1.5–2 倍 weight
- 实测 QPS 上限:用压测工具得出各节点稳定承载能力,按比例换算成 weight
注意:weight 是相对值,Nginx 内部会自动归一化,所以不必强求总和为 100 或换算成百分比。
搭配其他参数避免单点问题
仅靠 weight 不足以保障高可用。建议组合使用以下指令:
-
max_fails 和 fail_timeout:自动剔除故障节点,比如
max_fails=3 fail_timeout=30s -
slow_start:新上线或恢复的节点逐步加量,防止瞬间洪峰,如
slow_start=60s - backup:标记备用机,仅当其他全不可用时才启用
- down:临时下线某节点,不参与任何调度(可用于维护)
完整示例:
upstream backend {
server 192.168.1.10:8080 weight=4 max_fails=2 fail_timeout=20s slow_start=30s;
server 192.168.1.11:8080 weight=1 max_fails=2 fail_timeout=20s;
server 192.168.1.12:8080 weight=2 backup;
}
验证与调优技巧
配置生效后,别只看是否转发,要确认流量分布是否符合预期:
- 查看 Nginx 状态页(需编译时启用
--with-http_stub_status_module),观察各 server 的requests计数增长比 - 在 access_log 中添加
$upstream_addr变量,统计日志中各后端 IP 出现频次 - 持续观察 5–10 分钟真实流量,若偏差超 ±10%,检查是否有 sticky session、缓存代理干扰或后端主动拒绝连接
- 权重调整宜小步迭代(如每次 ±0.5 倍),避免激进改动引发抖动
不复杂但容易忽略。











