Nginx加权轮询中weight参数必须严格写作weight=数字,拼写错误(如weigth)、符号错误(如weight:3或weight="3")会导致参数被忽略或启动失败;nginx -t无法检测拼写错误,需用nginx -T | grep查看实际加载配置或通过压测验证流量比例。

排查 Nginx 加权轮询(weight)配置中参数拼写错误,核心是确认 upstream 块内 server 指令是否正确使用了 weight=数字,且没有混入无效关键字、错别字或非法语法。
检查 upstream 中 server 指令的 weight 语法是否规范
Nginx 仅识别 weight= 这一固定形式,不支持 weigth、weights、weight:、weight: 或 weight "5" 等变体。任何拼写偏差都会导致该参数被完全忽略(Nginx 默认 weight=1),但不会报错——这是最易忽略的隐患。
- ✅ 正确:
server 10.0.0.1:8080 weight=3; - ❌ 错误:
server 10.0.0.1:8080 weigth=3;(拼写错误,被静默忽略) - ❌ 错误:
server 10.0.0.1:8080 weight:3;(冒号非法,Nginx 启动失败) - ❌ 错误:
server 10.0.0.1:8080 weight="3";(引号非法,启动失败)
用 nginx -t 验证配置合法性,但注意它的局限性
nginx -t 能捕获语法错误(如冒号、引号、缺少分号),但对拼写错误(如 weigth)无感知——它会把未知参数当作自定义属性忽略,仍显示 “syntax is ok”。因此不能仅依赖 -t 判断 weight 是否生效。
- 运行
nginx -t确保无硬性语法错误 - 若通过,再进一步验证 weight 是否真实加载
通过 nginx -T + grep 或日志确认实际生效的 upstream 配置
nginx -T 输出完整合并后的配置(含 include 文件),配合 grep -A5 "upstream your_name" 可查看最终解析结果。重点观察每个 server 行是否包含 weight= 及其数值。
- 执行:
nginx -T 2>/dev/null | grep -A10 "upstream backend" | grep server - 若某行显示
server 10.0.0.1:8080 weigth=3;,说明拼写错误未被修正,weight 未生效 - 也可临时开启
error_log /path/to/log debug;,reload 后查日志中 upstream 初始化信息(含 weight 值)
用简单压测对比流量分布,反向验证 weight 是否起效
当配置看似正确却未达预期时,最直接的方式是发起少量并发请求,统计各后端实际接收请求数。例如两个节点 weight=3 和 weight=1,理论比例应为 75% : 25%。
- 用
ab -n 400 -c 10 http://test/或curl循环调用 + 后端 access_log 统计 - 若两台机器请求量接近 1:1,大概率是 weight 参数未生效(常见于拼写错误或被覆盖)
- 注意排除 keepalive、缓存、客户端重试等干扰因素,确保测试环境干净


















