weight参数用于nginx upstream中实现加权轮询负载均衡,权重越大分配请求比例越高;默认值为1,须为正整数,仅对round-robin策略生效。

在 Nginx 中,weight 参数用于在 upstream 块中为后端服务器设置权重,从而实现基于权重的轮询(weighted round-robin)负载均衡。权重值越大,该服务器被分配到的请求比例越高。
weight 的作用机制
Nginx 默认使用轮询(round-robin),即每个服务器轮流接收请求。启用 weight 后,Nginx 会按权重比例分配请求次数:比如两台服务器 weight 分别为 3 和 1,则每 4 个请求中,3 个发往第一台,1 个发往第二台(不严格按顺序,但长期统计趋近该比例)。
- 权重只在
upstream模块中生效,且仅对round-robin策略起作用(默认即此策略) - 未显式写
weight的服务器,默认 weight = 1 - weight 必须是正整数(如 1、2、5、10),不支持小数或百分比
- 若某服务器不可用(如健康检查失败),Nginx 会临时剔除它,剩余服务器按各自权重重新归一化计算比例
基本配置示例
以下是一个典型的带权重的 upstream 配置:
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;
}
此时三台服务器的流量占比约为:
192.168.1.10 → 3/(3+1+2) = 50%
192.168.1.11 → 1/6 ≈ 16.7%
192.168.1.12 → 2/6 ≈ 33.3%
配合其他参数提升稳定性
仅靠 weight 不足以应对真实场景,建议搭配以下参数使用:
-
max_fails + fail_timeout:定义连续失败多少次后暂停转发,并设定暂停时长(如
max_fails=3 fail_timeout=30s) - backup:标记为备用服务器,仅当其他非 backup 服务器全部不可用时才启用
-
down:临时下线某节点(如
server 192.168.1.13:8080 down;),不参与任何分发 -
slow_start(Nginx 1.11.5+):防止刚恢复的服务器因 sudden traffic surge 而过载,例如
slow_start=60s表示 60 秒内权重从 0 线性升至设定值
验证与调试技巧
可通过以下方式确认权重是否生效:
- 查看 Nginx 错误日志(
error_log)中是否有 upstream 相关调度记录(需开启debug日志级别) - 在各后端服务响应头中添加唯一标识(如
X-Server-ID),用 curl 或浏览器开发者工具观察实际分发情况 - 使用
nginx -t校验配置语法,避免因 weight 写错(如负数、非数字)导致 reload 失败 - 注意:weight 影响的是请求计数,不是带宽或连接数;若单个请求耗时差异极大,实际负载未必完全按权重分布











