加权轮询适用于后端服务器硬件差异明显、需按算力比例分配请求的场景;通过upstream中server的weight参数设定相对权重,并配合max_fails、fail_timeout等健康检查参数实现稳定调度。

在 Nginx 中配置加权轮询(Weighted Round Robin),核心是通过 weight 参数为每台后端服务器显式指定处理能力权重,让算力强的机器承接更多请求,算力弱的少接——不是靠“猜”,而是靠可计算、可预期的分配比例。
加权轮询适用什么场景
当后端服务器硬件差异明显时,比如:
- CPU 核心数不同(如 16 核 vs 4 核)
- 内存或磁盘 I/O 能力悬殊
- 部分节点运行其他服务,需预留资源
- 灰度发布中逐步提高新节点流量比例
配置加权轮询的关键写法
在 upstream 块中为每个 server 指令添加 weight=数字,数字无单位,只表示相对比例:
upstream backend {
server 192.168.1.10:8080 weight=4; # 高配服务器(如 16C32G)
server 192.168.1.11:8080 weight=2; # 中配服务器(如 8C16G)
server 192.168.1.12:8080 weight=1; # 低配或测试机(如 2C4G)
}总权重 = 4 + 2 + 1 = 7,对应请求分配比例约为:57%、29%、14%。Nginx 不做实时概率抽样,而是按权重值循环调度(例如序列:10→10→11→10→10→11→12…),长期来看严格符合该比例。
配合健康检查提升稳定性
仅设权重不够,还需确保故障节点自动隔离。推荐加上基础健康探测参数:
-
max_fails=3:连续失败 3 次即标记为不可用 -
fail_timeout=30s:30 秒内不向该节点转发新请求 -
slow_start=60s(可选):恢复后 60 秒内权重从 0 渐进到 full,防雪崩
完整示例:
upstream backend {
server 192.168.1.10:8080 weight=4 max_fails=3 fail_timeout=30s;
server 192.168.1.11:8080 weight=2 max_fails=3 fail_timeout=30s;
server 192.168.1.12:8080 weight=1 max_fails=3 fail_timeout=30s;
}验证是否生效的实用方法
不要只看配置语法是否正确,要验证实际分发效果:
- 开启 Nginx 访问日志中的
$upstream_addr变量,直接看到每次请求落到哪台后端 - 用
ab -n 1000 -c 50 http://your-domain/发起千次请求,统计各后端 IP 出现频次 - 观察比例是否接近理论值(如 weight=4:2:1 → 实际≈570:290:140)


















