轮询策略有效性可通过后端唯一标识响应+curl批量请求统计+nginx access.log交叉验证三步确认:每节点返回x-backend-id,100次请求应均匀分布(±10%内),log中$upstream_addr字段需显示等比例目标地址。

直接验证轮询是否按预期分发请求,关键在于让每个后端返回可区分的标识,再批量发起请求观察分布规律。不需要复杂工具,几条命令就能确认策略是否生效。
给每台后端加唯一响应标识
轮询本身不带日志输出,必须靠后端主动“说话”才能判断流向。最稳妥的方式是让每台服务在响应中嵌入自身身份:
- 在响应头里加 X-Backend-ID: node-a(推荐,轻量且易提取)
- 或在 HTML/JSON 响应体中写明端口、主机名,例如
{"server":"192.168.1.11","port":8080} - 避免所有节点返回完全相同的内容,否则无法区分请求落点
用 curl 批量请求并统计分布
执行固定次数的请求,提取标识后归类计数,看是否接近理论均值:
- 发送 100 次请求并提取响应头:
for i in {1..100}; do curl -sI http://nginx-ip/api/health 2>/dev/null | grep "X-Backend-ID"; done | sort | uniq -c - 若三台后端,理想结果是每台约 33 次;偏差超过 ±10% 就值得排查配置或网络干扰
- 可封装为脚本,加入自动断言,失败时退出码非 0,方便接入 CI 流程
查 Nginx 日志交叉验证
access.log 中的 $upstream_addr 变量会记录实际转发的目标地址,是最权威的落地证据:
- 确保 log_format 包含该字段,例如:
log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$upstream_addr"' - 执行请求后运行:
tail -n 50 /var/log/nginx/access.log | awk '{print $12}' | sort | uniq -c - 输出应显示类似
33 192.168.1.10:8080、34 192.168.1.11:8080的分布
观察长期趋势与异常偏移
单次测试只能看静态分布,真实环境需关注稳定性:
- 持续压测 5–10 分钟,每分钟采样一次,画出各节点请求数折线图——应基本平行,无持续单边倾斜
- 若某节点请求数稳定偏低,检查它是否被健康检查临时摘除(查 error.log 是否有
max_fails相关报错) - 若某节点响应时间明显变长但请求数未下降,说明轮询未感知负载,此时需考虑加权或 least_conn











