Nginx 日志格式

默认日志格式配置

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

该格式记录了客户端IP、用户、时间、请求、状态码、响应数据量、来源页、UA及代理信息‌。

常见变量及含义

1. 客户端信息

  • $remote_addr
    客户端 IP 地址(直接连接的客户端 IP,若存在代理则可能是代理服务器的 IP)。
  • $http_x_forwarded_for
    客户端原始 IP(当请求经过代理时,如 CDN 或负载均衡器,此变量记录原始客户端 IP 和代理链)。
  • $remote_user
    通过 HTTP 基础认证的用户名,未认证时为 -
  • $http_user_agent
    客户端浏览器或工具的 User-Agent 信息(如 Mozilla/5.0 ...)。

2. 请求信息

  • $request
    完整的请求行,包含请求方法、URI 和协议(如 GET /index.html HTTP/1.1)。
  • $request_method
    请求方法(如 GETPOST)。
  • $request_uri
    完整的原始请求 URI(包含查询参数)。
  • $args
    请求中的查询参数(即 ? 后的部分,如 name=john&age=30)。
  • $query_string
    $args
  • $scheme
    请求协议(如 httphttps)。
  • $host
    请求的 Host 头(域名或 IP + 端口)。
  • $server_protocol
    服务器协议版本(如 HTTP/1.1)。

3. 响应信息

  • $status
    HTTP 响应状态码(如 200404500)。
  • $body_bytes_sent
    发送给客户端的响应体大小(字节数,不包含响应头)。
  • $bytes_sent
    发送给客户端的全部数据大小(包括响应头和响应体)。
  • $sent_http_<header>
    响应头字段值,如 $sent_http_content_type 表示 Content-Type 头的值。

4. 连接信息

  • $connection
    连接序列号(唯一标识一个 TCP 连接)。
  • $connection_requests
    当前连接上处理的请求数量(对于 HTTP Keep-Alive 连接有效)。
  • $request_time
    请求处理时间(从读取客户端第一个字节到发送完响应的时间,单位:秒,精度到毫秒)。
  • $upstream_response_time
    反向代理时,后端服务器的响应时间(单位:秒,可能有多个值,用逗号分隔)。

5. 反向代理相关

  • $upstream_addr
    反向代理的后端服务器地址(IP:Port)。
  • $upstream_status
    后端服务器的 HTTP 响应状态码。
  • $upstream_http_<header>
    后端服务器返回的响应头字段,如 $upstream_http_server 获取后端 Server 头的值。

6. 其他常用变量

  • $time_local
    本地时间的访问时间戳(格式:19/May/2024:15:30:01 +0800)。
  • $server_port
    接收请求的服务器端口。
  • $http_referer
    请求来源页面的 Referer 头(即用户从哪个页面跳转而来)。
  • $request_length
    请求的总长度(包括请求行、请求头和请求体)。
  • $gzip_ratio
    响应体的压缩比(如 2.5 表示压缩后大小是原始大小的 40%)。
<think>嗯,用户想了解Nginx日志格式的详细解析。首先,我得回忆一下Nginx日志相关的配置。记得日志格式主要是通过log_format指令来定义的,然后在access_log里指定使用格式日志文件路径。不过用户可能不太清楚具体怎么配置,需要分步骤解释。 首先,应该解释默认的日志格式是什么样的。比如,Nginx默认的combined格式包含哪些变量,比如$remote_addr、$remote_user、$time_local等等。每个变量代表什么,比如$request是用户的请求行,$status是响应状态码。这部分需要详细说明,可能用户需要知道每个字段的含义才能自定义格式。 然后,用户可能想自定义日志格式,所以得举一个例子,比如如何添加特定的变量,比如$http_referer或者$http_user_agent,甚至自定义变量如$upstream_response_time。需要说明log_format的语法结构,比如log_format后面跟格式名称和字符串,字符串里用变量定义各个字段。 接下来,配置访问日志的部分,access_log指令的使用方法。比如指定日志文件路径和使用格式名称。可能还需要提到日志缓存和gzip压缩的参数,这些优化点用户可能会感兴趣。 错误日志的配置也不能忽略,虽然用户主要问的是日志格式,但error_log的级别和路径设置也是相关的。比如debug级别可以记录更详细的信息,但要注意性能影响。 然后,需要提供一些实际的配置示例,这样用户可以直接参考。比如在nginx.conf里定义main格式,包含常用变量,然后应用到access_log里。同时,说明如何检查日志是否生效,比如用tail命令实时查看日志输出,确保配置正确。 可能还需要提醒用户注意权限问题,比如Nginx进程是否有日志文件的权限,避免配置正确但日志无法生成的问题。另外,自定义日志路径后,要记得重新加载配置,比如用nginx -s reload。 用户可能还会关心如何分析这些日志,比如用工具分析访问日志,或者监控错误日志排查问题。不过用户的问题主要是格式解析,这部分可能需要点到为止,或者简单提及。 最后,确保引用了提供的参考内容,比如引用[5]提到log_format和access_log的关系,引用[4]关于变量$status的说明,引用[3]关于日志系统的重要性。这些引用需要自然地融入回答中,帮助用户理解官方文档和最佳实践。 总结一下,回答的结构应该是先介绍日志格式的基本概念,然后详细讲解默认格式和自定义配置,接着是访问日志和错误日志的设置,给出配置示例和验证方法,最后相关问题和引用部分。这样用户能逐步了解如何配置和解析Nginx日志格式,满足他们的需求。</think>### Nginx日志格式详细解析 Nginx日志格式由`log_format`指令定义,并通过`access_log`指令应用到具体的日志文件中。以下为关键解析步骤: --- #### 一、默认日志格式 Nginx默认使用`combined`格式(非显式定义),包含以下核心变量: $$log_format\ combined\ '\$remote_addr - \$remote_user [\$time_local] "\$request" \$status \$body_bytes_sent "\$http_referer" "\$http_user_agent"';$$ - `$remote_addr`:客户端IP地址 - `$time_local`:请求时间(本地时区) - `$request`:完整请求行(如`GET /index.html HTTP/1.1`) - `$status`:HTTP响应状态码(如200、404)[^4] - `$body_bytes_sent`:发送给客户端的字节数(不含响应头) --- #### 二、自定义日志格式 通过`log_format`指令可扩展字段,例如添加响应时间: ```nginx http { log_format main '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" ' 'rt=$request_time ut=$upstream_response_time'; access_log /var/log/nginx/custom.log main; } ``` - `$request_time`:请求处理总时间(秒) - `$upstream_response_time`:反向代理上游服务器响应时间 --- #### 三、日志配置实践 1. **访问日志路径配置** ```nginx access_log /var/log/nginx/access.log main buffer=32k gzip=1 flush=5m; ``` - `buffer`:启用日志入缓存(32KB) - `gzip`:启用日志压缩(需Nginx编译时支持) - `flush`:设置缓存刷新时间(5分钟)[^2] 2. **错误日志分级** ```nginx error_log /var/log/nginx/error.log warn; ``` - 日志级别:`debug` > `info` > `notice` > `warn` > `error` > `crit` - 生产环境建议使用`warn`级别平衡信息量与性能[^1] --- #### 四、日志验证与调试 1. 通过命令实时观察日志: ```bash tail -f /var/log/nginx/custom.log ``` 2. 检查日志变量是否生效: ```bash grep 'rt=' /var/log/nginx/custom.log | head -n 3 ``` --- #### 五、高级应用场景 - **安全审计**:通过`$http_x_forwarded_for`记录原始客户端IP(适用于代理环境) - **性能分析**:结合`$upstream_cache_status`分析缓存命中率 - **业务统计**:使用`$arg_*`记录特定URL参数(如`$arg_user_id`) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值