Nginx 访问日志的每一列分别是什么意思?

Nginx 访问日志默认 combined 格式的各列含义:remote_addr、remote_user、time_local、request、status、body_bytes_sent、http_referer、http_user_agent。本文逐列详解并介绍自定义 log_format。

最佳实践
Nginx 访问日志的每一列分别是什么意思?封面

默认 combined 格式的各列依次为:客户端 IP、认证用户、本地时间、请求行、状态码、响应字节数、Referer 来源、User-Agent。

默认格式与逐列解析

nginx.conf 中的定义:

log_format combined '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent"';

一条日志示例:

192.168.1.1 - - [15/Jan/2024:10:30:45 +0800] "GET /api/users HTTP/1.1" 200 1234 "https://example.com/page" "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
变量 含义
192.168.1.1 $remote_addr 客户端 IP
- $remote_user HTTP 认证用户名(无认证时为 -)
[15/Jan/2024:10:30:45 +0800] $time_local 本地时间(含时区)
"GET /api/users HTTP/1.1" $request 请求行:方法 + 路径 + 协议
200 $status 响应状态码
1234 $body_bytes_sent 响应体字节数(不含响应头)
"https://..." $http_referer 来源页面
"Mozilla/5.0..." $http_user_agent 客户端 UA

常用扩展变量

log_format performance '$remote_addr [$time_local] "$request" '
                       '$status $body_bytes_sent '
                       '$request_time $upstream_response_time';  # 耗时字段
  • $request_time:完整请求处理时间(秒,毫秒精度);
  • $upstream_response_time:后端服务响应时间;
  • $http_x_forwarded_for:代理链中的真实 IP;
  • $request_length:请求大小(含请求体和头)。

观测云对照

观测云 Nginx 集成自动采集并解析访问日志所有字段(含 request_time 等性能字段),控制台直接查看 QPS、延迟分布、状态码趋势、TOP URL,并支持 5xx 告警配置。

常见问题(FAQ)

Q:$remote_addr 显示的是代理 IP 怎么办?
A:配置了反向代理后,Nginx 看到的是代理的 IP。配置 set_real_ip_from + real_ip_header X-Forwarded-For 还原真实客户端 IP。

Q:$time_local 能改成 ISO 格式吗?
A:用 $time_iso8601(如 2024-01-15T10:30:45+08:00),机器解析更友好;$msec 是带毫秒的时间戳。

Q:某些请求没有记日志?
A:检查 location 中是否有 access_log off(健康检查等端点常关日志)。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台