nginx默认采用加权轮询实现精细化流量调度,权重是轮询的增强而非替代;未显式配置其他算法时自动启用,未设weight的server默认为1,调度基于总权重平滑分配,并需搭配max_fails和fail_timeout等健康检查机制确保可靠性。

加权轮询就是默认轮询的升级形态
只要你没显式配置 ip_hash、least_conn 等其他算法,Nginx 的 upstream 就自动启用加权轮询。所谓“轮询”只是 weight=1 的特例;一旦任意一台 server 设了 weight,整个 upstream 就按加权逻辑调度,所有 server 都参与这个统一比例分配过程。
- 没写 weight 的 server 默认 weight=1
- 写了 weight 的 server 按数值参与总权重计算(如 3+2+1=6,对应 50% / 33% / 17%)
- 调度不是简单重复发 3 次→2 次→1 次,而是平滑加权轮询,避免短时间请求扎堆
权重配置必须严格遵循语法规范
weight 参数必须紧贴在 server 地址后、同一行内,中间只允许空格,不能换行、不能加等号空格、不能独立成行。
- ✅ 正确:
server 192.168.1.10:8080 weight=3; - ❌ 错误:
server 192.168.1.10:8080;weight=3;(报错:invalid number of arguments) - ❌ 错误:
server 192.168.1.10:8080 weight = 3;(空格破坏解析)
权重要搭配健康检查才真正可靠
权重只决定“该分多少”,不感知“还能不能分”。若某台高权重机器已过载或宕机,Nginx 仍会继续派请求,直到触发失败判定。
- 必须显式配置 max_fails 和 fail_timeout,例如:
max_fails=2 fail_timeout=30s - 失败指超时或返回 500/502/503/504 等状态码
- 标记为 down 后,该 server 从加权队列中剔除,流量自动重分配到其余节点
- 30 秒后自动试探恢复,成功则重新纳入权重调度
权重值设定建议与调优方向
权重是相对比值,不是绝对能力值,重点在于反映服务器间真实处理能力差异。
- 建议初始值设在 1–5 区间(如 2、3、5),避免用 100 这类极端值导致单点压力过大
- 可结合 CPU、内存、连接数等监控指标反推合理权重比例
- 修改后必须执行
nginx -s reload,旧 worker 进程不会自动同步新权重 - 不推荐与 backup 混用:backup server 不允许设 weight











