Nginx轮询负载均衡需自定义日志格式才能记录后端服务器信息,通过$upstream_addr、$upstream_response_time和$upstream_status等变量可验证轮询效果及排查节点异常。

Linux 下 Nginx 轮询负载均衡的访问日志默认不记录后端服务器信息,仅记录客户端请求。要真正分析轮询分发效果,需开启并定制日志格式,把上游节点、响应时间、状态等关键字段打进去。
开启基础访问日志
Nginx 默认已启用 access_log,但可能被注释或路径不对。确认 nginx.conf 的 http 块中包含以下配置:
- 确保
log_format已定义(常用main格式) - 取消或添加
access_log logs/access.log main;行 - 日志路径
logs/access.log是相对于 Nginx 安装目录的,如编译安装在/usr/local/nginx,则实际路径为/usr/local/nginx/logs/access.log
增强日志:记录轮询调度详情
只看客户端 IP 和 URL 不足以判断轮询是否生效。必须扩展日志变量,捕获 upstream 实际选中的后端:
- 使用
$upstream_addr:记录被代理到的后端地址(含 IP:port),多个后端时还带重试信息 - 使用
$upstream_response_time:后端响应耗时(秒级,如0.023),可观察各节点延迟差异 - 使用
$upstream_status:后端返回的状态码(如200、502),便于发现故障节点
示例增强日志格式:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
log_format upstream_log '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$upstream_addr $upstream_response_time $upstream_status';然后在 server 或 location 块中指定使用该格式:
access_log logs/upstream_access.log upstream_log;
验证轮询是否正常工作
启动或重载 Nginx 后,用 curl 多次请求,再查日志即可直观看到轮询效果:
- 执行
curl http://your-domain/api/test十几次 - 运行
tail -100 logs/upstream_access.log | awk '{print $12}'(假设$upstream_addr是第 12 列) - 应看到类似
192.168.1.101:80、192.168.1.102:80、192.168.1.103:80交替出现 - 若某节点长期不出现,检查其是否因
max_fails触发了临时剔除
常见问题排查线索
日志不仅是记录,更是排障依据:
-
$upstream_addr显示none:说明请求未进入 upstream(如匹配了静态 location) - 某节点频繁出现
502+ 高$upstream_response_time:该后端可能过载或服务异常 - 所有请求都落到同一个后端:检查是否误配了
ip_hash或least_conn等非轮询策略 - 日志中大量
127.0.0.1:8080重复:可能是 proxy_pass 写错了,指向了本地而非 upstream 名称

















