weight参数是Nginx实现差异化负载的核心机制,通过为upstream server分配不同权重控制请求分发比例,归一化后按5:3:2等比例分配流量,并需配合max_fails、slow_start等指令提升调度合理性。
Nginx 的
参数是实现后端服务器差异化负载的核心机制,它通过为每个 upstream server 分配不同权重值,控制请求分发的比例,从而适配服务器性能差异、资源容量或部署阶段等实际场景。
weight 参数的基本作用与计算逻辑
决定某台后端服务器在轮询(
)策略下被选中的相对概率。默认值为 1;若配置为
,则该节点接收的请求数约为
节点的 3 倍。Nginx 不做实时连接数或响应时间加权,而是按权重比例分配新请求(基于平滑加权轮询算法,避免瞬时集中)。
权重仅在
块中启用,默认轮询策略下生效
所有 weight 值会被归一化处理,例如
和
等价于
和
weight=0 表示临时下线该节点(不参与分发,也不触发健康检查)
典型配置示例与效果验证
假设三台后端服务性能不均:A(高配)、B(中配)、C(低配),可按 CPU 核心数或压测 QPS 比例设权:
理论请求分配比为 5:3:2,即 A 承担约 50%、B 约 30%、C 约 20% 的流量。可通过 Nginx stub_status 模块或日志统计各 server 的 $upstream_addr 字段,验证实际分发是否趋近该比例。
搭配其他指令提升差异化负载的合理性
单纯依赖 weight 可能忽略运行时状态,建议组合使用以下机制:
和
:自动屏蔽异常节点,防止权重失效导致故障扩散
:新上线或恢复的高权重点启动时缓慢增加流量(如
),避免瞬间压垮
:为关键节点配置备用机,仅当主节点全不可用时才启用,不参与常规 weight 分配
避免与
或
等会话保持策略混用,否则 weight 将失效
注意事项与常见误区
weight 是静态配置项,无法动态响应后端负载变化。若需实时自适应调度,应引入外部组件(如 Consul + nginx-upsync-module)或改用支持动态权重的服务网格方案。
修改 weight 后必须重载 Nginx(
),不会热生效
不要将 weight 设得过大(如 100+),可能造成小权重节点长期无流量,健康检查失真
weight 对 keepalive 连接复用无影响,长连接仍绑定原 server,短连接才受权重调控
weightweightround-robinweight=3weight=1upstreamweight=2weight=814upstream backend {
server 192.168.1.10:8080 weight=5; # A 服务器,能力最强
server 192.168.1.11:8080 weight=3; # B 服务器,中等
server 192.168.1.12:8080 weight=2; # C 服务器,较弱
}max_failsfail_timeoutslow_startslow_start=30sbackupip_hashhash $request_uringinx -s reload