最有效验证加权轮询的方式是直接压测加日志比对;需用真实请求验证权重,通过响应头X-Server-ID或$upstream_addr识别分发节点,用wrk等工具发起5000+无状态请求,确保禁用缓存、暂停其他流量,统计实际占比与配置权重(如5:3:2)误差≤±3%,并验证健康检查剔除异常节点后的权重重分配及slow_start流量恢复效果。

直接压测 + 日志比对是最有效的方式。加权轮询不是理论比例,而是长期统计结果,必须用真实请求验证是否接近预设权重比。
准备可区分的后端服务
让每台后端服务器返回唯一标识,方便识别请求落到哪台机器上:
- 在每台后端服务响应头中添加自定义字段,例如 X-Server-ID: node-a、X-Server-ID: node-b
- 或统一在 Nginx 的
proxy_pass后加日志变量,如log_format main '$remote_addr - $upstream_addr ...',其中$upstream_addr会记录实际转发目标 - 避免只靠 IP 区分——若用了 keepalive 或连接复用,单个客户端可能反复命中同一台,干扰权重统计
发起可控的批量请求
不用浏览器点几次,要模拟足够多、无状态、短生命周期的请求,才能体现加权轮询的统计规律:
- 用 wrk 或 hey 发起 5000+ 请求,例如:
wrk -t4 -c200 -d30s http://your-nginx-lb/ - 禁用客户端缓存与重定向,确保每个请求都走完整代理链路
- 测试期间暂停其他流量,防止干扰数据采集
采集并分析分发比例
从 Nginx 访问日志或后端响应中提取分配结果,算出实际占比:
- 如果用
$upstream_addr记录,执行:
awk '{print $NF}' /var/log/nginx/access.log | sort | uniq -c | sort -nr - 若后端返回
X-Server-ID,可用 curl 批量抓取响应头,或用 Prometheus + nginx-exporter 汇总 - 对比实际分布(如 node-a: 51%, node-b: 32%, node-c: 17%)和配置权重(5:3:2 → 50%:30%:20%),误差控制在 ±3% 内属正常
验证健康检查是否影响权重收敛
加权轮询不自动规避慢节点,但健康检查会临时剔除异常实例,导致权重“失真”:
- 人为制造一台后端延迟(如
sleep 2响应),观察其是否被max_fails=2 fail_timeout=15s剔除 - 剔除后,剩余节点的实际分发比会按新权重重新归一化(例如原 5:3:2,剔除 weight=2 节点后变成 5:3 → 62.5% : 37.5%)
- 等它恢复后,通过
slow_start=30s看流量是否逐步回升,而非瞬间打满


















