Nginx权重策略通过正整数weight参数实现加权轮询,按总权重归一化分配请求,需配合健康检查与正确proxy_pass路径配置以保障负载均衡效果。

在 Nginx 中,权重策略(Weighted Round Robin)是实现请求按能力分配的核心手段。它不改变轮询本质,而是通过数值比例动态调节各后端服务器的承接频率,让高性能节点多干活、低配节点少分担,从而提升整体吞吐与资源利用率。
定义 upstream 时明确设置 weight 参数
权重必须写在 upstream 块内的 server 指令后,且仅对同级服务器生效。未显式声明 weight 的服务器默认值为 1。
- 权重是相对值,不是百分比——Nginx 按总权重归一化计算分配比例
- 例如:
server a.example.com weight=6;和server b.example.com weight=2;,实际请求分配比为 3:1(6/8 vs 2/8) - weight 只接受正整数,不支持小数或负数
配合健康检查自动剔除异常节点
权重策略本身不感知后端状态,需搭配基础健康机制才能真正“高效”。Nginx 默认会在连接失败时临时标记 server 为不可用。
- 添加
max_fails=3 fail_timeout=30s可控制连续失败阈值和恢复窗口 - 使用
backup标记备用服务器,仅当所有主节点失效时才启用 - 注意:Nginx 开源版无主动心跳探测,依赖被动失败触发;如需主动探活,需借助第三方模块或外部监控+API 动态重载配置
避免路径转发逻辑破坏权重效果
权重调度发生在 upstream 选节点阶段,但若 proxy_pass 路径处理不当,可能引发后端路由错误甚至 404,间接导致某台服务器请求堆积或被反复重试。
- location 匹配后,
proxy_pass末尾带/会剥离 location 前缀;不带则保留原始路径 - 例如:
location /api/ { proxy_pass http://backend/; }→/api/user转发为/user - 错误示例:
proxy_pass http://backend;(缺末尾斜杠)→ 请求变成http://backend/api/user,后端若无对应路由将失败
验证与调优建议
上线前应确认权重分配是否符合预期,避免因配置偏差引发负载倾斜。
- 用
nginx -t检查语法,重启后观察 access log 中各后端 IP 出现频次 - 可通过
stub_status或第三方模块(如 nginx-module-vts)实时查看 upstream 各节点请求计数 - 初期建议从保守权重起步(如 2:1 或 3:2),结合 CPU、响应时间等指标逐步调整
- 注意:权重不能替代容量规划——若某节点长期超载,应优先扩容或优化应用,而非单纯调高 weight


















