【Nginx五】Nginx常用日志格式含义

本文详细解读了Nginx日志格式中的log_format指令及其常用参数,包括时间信息、请求时间、状态码等,并介绍了access_log指令如何指定日志文件及格式。了解这些内容对于优化服务器性能和分析流量数据至关重要。

1. log_format

1.1 log_format指令用于指定日志的格式,格式:

 

log_format name(格式名称) type(格式样式)

 

1.2 如下是一个常用的Nginx日志格式:

 

log_format      main    '[$time_local]|$request_time|$status|$body_bytes_sent|$remote_addr|"$request"|"$http_referer"|"$http_user_agent"|$http_x_forwarded_for|$upstream_cache_status|$upstream_response_time|$upstream_status|$upstream_addr';

 

1.3 各个格式参数的含义:

 

  • time_local: 访问的时间与时区,比如18/Jul/2012:17:00:01 +0800,时间信息最后的"+0800"表示服务器所处时区位于UTC之后的8小时
  • $request_time:整个请求的总时间,以秒为单位
  • $status:记录请求返回的http状态码,比如成功是200。
  • $uptream_status:upstream状态,比如成功是200.
  • $body_bytes_sent:发送给客户端的文件主体内容的大小,比如899,可以将日志每条记录中的这个值累加起来以粗略估计服务器吞吐量
  • $remote_addr:远程客户端的IP地址。
  • $request:请求的URI和HTTP协议,这是整个PV日志记录中最有用的信息,记录服务器收到一个什么样的请求
  • $http_referer:记录从哪个页面链接访问过来的(请求头Referer的内容 )
  • $http_user_agent:客户端浏览器信息(请求头User-Agent的内容 )
  • $http_x_forwarded_for:客户端的真实ip,通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通 过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加 x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。
  • $upstream_cache_status

          MISS
          EXPIRED - expired, request was passed to backend
          UPDATING - expired, stale response was used due to proxy/fastcgi_cache_use_stale updating
          STALE - expired, stale response was used due to proxy/fastcgi_cache_use_stale
          HIT - (dash) - request never reached to upstream module. Most likely it was processed at Nginx-level only (e.g. forbidden, redirects, etc) (Ref: Mail Thread)

  • $upstream_response_time 请求过程中,upstream的响应时间,以秒为单位
  • $uptream_status:upstream状态,比如成功是200.
  • $upstream_addr:upstream的地址,即真正提供服务的主机地址
  • $remote_user:远程客户端用户名称,用于记录浏览者进行身份验证时提供的名字,如登录百度的用户名scq2099yt,如果没有登录就是空白。

2. access_log 指令

 

access_log      /usr/local/nginx/access.log  main;

 

指定日志文件以及日志格式

 

 

 

 

 

 

 

 

 

 

<think>好的,用户想了解如何在Nginx中定制某个Web服务的日志格式。首先,我得回忆一下Nginx日志配置相关知识。记得Nginx日志模块是ngx_http_log_module,日志格式主要通过log_format指令来定义,而access_log指令用来指定日志文件和使用的格式。 用户可能已经知道默认的日志格式,但需要自定义以满足特定需求,比如记录更多信息或改变输出格式。我需要先确认用户是否有具体需求,比如想记录哪些字段,但问题描述中没有提到,所以可能需要给出一般性的步骤和示例。 首先,我应该解释log_format指令的语法。log_format后面跟格式名称,然后是字符串包含变量。比如常见的变量如$remote_addr、$time_local、$request等。然后,在access_log中引用这个格式名称,并指定日志文件路径。 接下来,可能需要给出一个示例配置。例如,用户想记录客户端的IP、时间、请求方法、URI、状态码、响应大小、Referer和User-Agent。这时候可以定义一个名为custom_format的日志格式,包含这些变量,并用access_log应用这个格式。 还要提醒用户配置的上下文,log_format只能在http块中设置,而access_log可以在http、server或location块中使用。可能需要说明如何将配置添加到Nginx的配置文件中,通常是nginx.conf或者sites-available/下的某个配置文件。 另外,需要提到测试配置是否正确,使用nginx -t命令检查语法,然后reload服务使配置生效。同时,可以展示自定义日志格式后的效果示例,让用户更直观地看到输出结果。 用户可能还想知道有哪些变量可用,这时候可以建议参考Nginx官方文档中的变量列表,或者给出一些常用变量的例子,比如$http_x_forwarded_for用于获取经过代理后的真实IP,$request_time记录请求处理时间等。 还要注意避免常见错误,比如变量名拼写错误,或者忘记在access_log中指定自定义格式名称,导致仍然使用默认格式。此外,如果用户需要不同的日志格式在不同的location或server块中,可以说明如何为不同的区块设置不同的日志格式和文件。 最后,总结一下步骤:定义log_format,应用access_log,测试并重载配置。确保用户能够按照步骤操作,并验证日志是否正确生成。如果有更复杂的需求,比如条件记录日志日志分割,可能需要进一步介绍相关模块或方法,但根据当前问题,可能暂时不需要深入。</think>在 Nginx 中定制日志格式的步骤如下: --- ### 一、核心指令 Nginx 通过 `log_format` 指令定义日志格式,用 `access_log` 指令应用格式: ```nginx # 定义日志格式(http 块内配置) log_format custom_format '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"'; # 应用日志格式(server/location 块内配置) access_log /var/log/nginx/access.log custom_format; ``` --- ### 二、格式参数详解 #### 常用变量: - `$remote_addr` → 客户端IP - `$time_local` → 请求时间 - `$request` → 请求方法+URL+协议(如 `GET /index.html HTTP/1.1`) - `$status` → HTTP 状态码 - `$body_bytes_sent` → 发送给客户端的字节数 - `$http_referer` → 请求来源页 - `$http_user_agent` → 客户端浏览器标识 #### 高级变量示例: ```nginx log_format advanced_format 'ProxyIP: $http_x_forwarded_for ' 'ResponseTime: $request_time ' 'CacheStatus: $upstream_cache_status'; ``` --- ### 三、操作步骤 1. **编辑配置文件** ```bash sudo vim /etc/nginx/nginx.conf ``` 2. **添加 log_format 定义**(在 http 块内) 3. **修改 access_log 路径**(在 server/location 块内) 4. **验证并重载配置** ```bash sudo nginx -t # 检查语法 sudo systemctl reload nginx # 重载服务 ``` --- ### 四、效果示例 原始日志: ``` 127.0.0.1 - - [10/Oct/2023:14:23:45 +0800] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" ``` 定制后日志: ``` 192.168.1.5 - anonymous [10/Oct/2023:14:23:45 +0800] "GET /api/data HTTP/1.1" 404 153 "https://example.com" "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" ``` --- ### 、调试技巧 1. 临时启用调试日志: ```nginx error_log /var/log/nginx/error.log debug; ``` 2. 使用 `map` 过滤特殊请求: ```nginx map $status $loggable { ~^[23] 0; # 2xx/3xx状态码不记录 default 1; } access_log /path/to/access.log combined if=$loggable; ``` --- ### 六、注意事项 1. 日志文件权限需匹配 Nginx 工作进程用户(通常为 `www-data` 或 `nginx`) 2. 高并发场景建议关闭 `access_log` 缓冲区: ```nginx access_log /path/to/log.gz custom_format gzip=9 buffer=64k flush=5m; ``` 3. 日志文件建议定期切割(可用 `logrotate` 工具) 完整变量列表可参考官方文档:http://nginx.org/en/docs/varindex.html
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值