Nginx upstream加权轮询通过weight=正整数设置各server相对权重,实现长期稳定的流量比例分发,如weight=5:3:2对应50%:30%:20%,需配合max_fails和fail_timeout增强容错,且weight仅在http块内生效、不支持小数或与ip_hash共用。

在 Nginx 的 upstream 块中配置带权重的轮询,核心是给每个 server 指令加上 weight 参数。它不是简单地“多转几次”,而是让 Nginx 按照加权轮询(Weighted Round Robin)算法长期稳定地按比例分发请求。
权重参数怎么写
每个后端服务器行末添加 weight=正整数,数值代表相对服务能力:
-
weight=10和weight=5表示流量比约为 2:1 -
weight=3、weight=2、weight=1对应约 50% : 33% : 17% - 不写
weight时默认为 1,所有节点权重相等
完整配置示例
以下是一个典型写法,放在 http 块内:
upstream backend {
server 192.168.1.101:8080 weight=5;
server 192.168.1.102:8080 weight=3;
server 192.168.1.103:8080 weight=2;
}
这个配置会让三台服务器长期接收请求的比例趋近于 5:3:2,也就是 50%、30%、20%。
搭配健康检查更可靠
仅设权重不够,还需防止故障节点持续收请求。建议显式补充容错参数:
-
max_fails=2:连续失败 2 次才标记为不可用 -
fail_timeout=30s:30 秒内不向该节点转发新请求 - 可组合写成:
server 192.168.1.101:8080 weight=5 max_fails=2 fail_timeout=30s;
注意几个关键点
避免常见误配:
- 权重必须是正整数,不能是小数或 0
-
upstream块必须定义在http块内,不能放在server或location中 - 权重策略和
ip_hash互斥,开了ip_hash就不能用weight - 权重影响的是长期统计分布,单次请求无法精确控制落到哪台机器











