加权轮询测试重点是验证流量是否按预设权重比例真实分配,需通过访问日志统计$upstream_addr、并发压测(如ab)、后端标识返回及健康检查影响排查综合判断。

加权轮询的测试重点不是“是否轮询”,而是验证流量是否按预设权重比例真实分配。只要配置正确,Nginx 会严格按权重调度请求,但实际业务表现受后端响应、网络、客户端行为等影响,需结合日志、工具和可观测性手段综合判断。
用访问日志统计真实分发比例
这是最直接、最可信的方式。Nginx 默认 access_log 记录了每个请求的 upstream_addr(即被代理到的具体后端地址),开启该字段即可回溯每条请求去向。
- 确保 nginx.conf 中 location 块启用了 log_format 包含 $upstream_addr,例如:
- 重启 Nginx 后,发起足够多请求(建议 ≥1000 次);
- 用命令提取并统计(Linux/macOS):
- 若配置为 weight=3、weight=2、weight=1,则理想分布应接近 50% : 33% : 17%,允许 ±3% 浮动(因请求离散性和健康检查临时剔除)。
用 ab 或 wrk 模拟并发压测
单次刷新或少量请求易受 Keep-Alive 复用干扰,无法反映权重策略本质。必须使用并发压测工具生成独立请求流。
- 例如三台后端:192.168.1.10:8080(weight=3)、192.168.1.11:8080(weight=2)、192.168.1.12:8080(weight=1),总权重=6;
- 运行:ab -n 6000 -c 100 http://nginx-ip/(共 6000 请求,模拟 100 并发);
- 压测结束后立即分析 access.log,看各后端实际承接请求数是否趋近于 3000 : 2000 : 1000;
- 注意:压测期间关闭后端服务的缓存,并确认所有后端响应时间相近,否则慢节点可能被 Nginx 主动降权(依赖 max_fails/fail_timeout)。
配合后端返回标识快速人工验证
适合开发/测试环境快速定性观察,不替代定量统计,但能第一时间发现配置未生效或权重被覆盖等基础问题。
- 让每台后端在响应体中返回唯一标识,例如:
- 192.168.1.10 → 返回 "S1 (w=3)";192.168.1.11 → "S2 (w=2)";192.168.1.12 → "S3 (w=1)";
- 用 curl 循环 30 次并提取标识:for i in {1..30}; do curl -s http://localhost/ | grep S; done | sort | uniq -c;
- 若结果明显偏离 3:2:1(如全是 S1 或完全随机),需检查 upstream 块是否被其他 server 配置重复引用,或是否存在 ip_hash 等冲突指令。
关注健康检查对权重分配的实际影响
权重是静态配置,但 Nginx 运行时会动态调整可用节点列表。一旦某台后端短暂不可达,它会被临时剔除,剩余节点将按相对权重重新分摊流量——这会导致短期比例失真。
- 检查 upstream 中是否配置了 max_fails=3 fail_timeout=30s 等参数;
- 查看 error.log 是否有 “no live upstreams” 或 “connect failed” 类报错;
- 测试前可先 telnet 或 curl 各后端端口,确保全部可达;
- 若业务允许,可在压测期间临时注释掉健康检查参数,排除干扰后再恢复。


















