nginx通过upstream块中server指令的weight参数实现加权轮询流量分发,无需额外启用策略;权重为相对值,如4:2:1对应约57%、29%、14%流量;proxy_pass必须仅写upstream名称,否则权重失效;建议配合max_fails、fail_timeout和backup提升容错性;权重效果需高并发下才趋近理论比例。

直接在 upstream 块里给每个后端 server 设置 weight 参数,就能实现基于权重的流量分发。Nginx 默认采用加权轮询(Weighted Round Robin),不需要额外开启策略,配置简洁、效果明确。
定义带权重的 upstream 服务器组
在 http 块中声明 upstream,为每台后端服务指定 weight 值:
示例配置:
upstream app_servers {
server 192.168.1.10:8080 weight=4;
server 192.168.1.11:8080 weight=2;
server 192.168.1.12:8080 weight=1;
}
这组配置会让三台服务器分别承接约 57%、29%、14% 的请求流量(比例为 4:2:1)。权重值是相对关系,不强制要求总和为 100 或必须整除。
在 location 中正确调用 upstream
使用 proxy_pass 时,地址必须只写 upstream 名称,不能带协议或端口:
- ✅ 正确:
proxy_pass http://app_servers; - ❌ 错误:
proxy_pass http://app_servers:8080;或proxy_pass http://192.168.1.10:8080;
如果写成带 IP 或完整 URL 的形式,Nginx 就不会走 upstream 分发逻辑,而是当作普通代理直连,权重配置将失效。
配合健康检查提升稳定性
仅设 weight 不够,建议加上基础容错机制:
-
max_fails=2:连续失败 2 次就标记该节点为不可用 -
fail_timeout=10s:下线后 10 秒内不再尝试调度 -
backup:可为关键节点添加备用服务器,主节点全挂时自动启用
例如:server 192.168.1.13:8080 weight=1 backup;,它默认不参与轮询,只在其他节点异常时启用。
验证权重是否生效
可通过以下方式确认实际分发效果:
- 反复访问代理地址,用
curl -I查看响应头中的X-Backend-Server(需后端主动返回标识) - 查看 Nginx access log,统计各后端 IP 出现频次比例
- 用
nginx -t检查语法,reload 后观察日志是否有 “upstream” 相关错误
注意:权重影响的是请求分发概率,不是绝对精确的计数比;在小流量下可能有偏差,高并发下才趋近理论比例。











