nginx自定义access访问日志格式
在Nginx中,访问日志是非常重要的。默认情况下,Nginx将访问日志写入到access.log文件中。这个文件中包含了每个请求的时间、来源、请求方式、请求路径、状态码等基本信息。然而,有时候我们需要自定义访问日志的格式,以便更好地分析和监控访问信息。本文将介绍如何在Nginx中自定义访问日志格式。
Nginx访问日志格式
Nginx访问日志格式是由变量和字符串组成的格式化字符串。其中变量代表了需要记录的请求信息,字符串则代表了日志记录的格式。Nginx预定义了很多变量,如下所示:
- $remote_addr:客户端IP地址
- $remote_user:客户端用户名
- $time_local:请求时间
- $request:请求的URI和HTTP协议版本
- $status:请求返回的状态码
- $body_bytes_sent:发送给客户端的字节数
- $http_referer:引用的页面地址
- $http_user_agent:客户端代理信息
通过在访问日志中使用这些变量,可以记录请求的各种信息。默认情况下,Nginx的访问日志格式为:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
该格式将客户端的IP地址、用户名、请求时间、请求URI和HTTP协议版本、请求返回的状态码、发送给客户端的字节数、引用的页面地址、客户端代理信息和X-Forwarded-For头信息记录在日志文件中。
自定义访问日志格式
有时候,我们需要记录更多的信息来更好地分析和监控访问信息。例如,我们可能需要记录每个请求的响应时间、请求的来源、请求的参数等信息。在Nginx中,我们可以通过在访问日志格式中添加自定义变量来实现自定义访问日志格式。下面是一个示例:
log_format custom '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'$request_time $upstream_response_time '
'$sent_http_content_type $sent_http_x_cache';
access_log /var/log/nginx/access.log custom;
在这个示例中,我们添加了$request_time和$upstream_response_time变量。$request_time表示Nginx处理请求的总时间,包括客户端的网络延迟和Nginx的处理时间。$upstream_response_time表示Nginx从上游服务器(例如,代理服务器、FastCGI服务器等)接收到响应的时间。除此之外,我们还添加了$sent_http_content_type和$sent_http_x_cache变量,用于记录响应的Content-Type和缓存信息。
除了预定义的变量,我们还可以自定义变量来记录其他信息。例如,我们可以添加一个变量来记录请求的来源,如下所示:
map $http_referer $my_referer {
default "";
"~^https?://([^/]+)/" $1;
}
log_format custom '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$my_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'$request_time $upstream_response_time '
'$sent_http_content_type $sent_http_x_cache';
access_log /var/log/nginx/access.log custom;
在这个示例中,我们使用map指令来定义了一个名为$my_referer的变量。这个变量的值根据请求的来源来动态计算。如果请求的来源为空,则$my_referer的值为"",否则$my_referer的值为来源中的第一个/之前的部分。然后,我们在访问日志格式中使用了$my_referer变量来记录请求的来源。
相关文章
- 从0开始,3步构建Nginx日志监控和运营指标
- 重识Nginx - 02 手把手教你编译适合自己的nginx 1.22.0
- 小识牛刀:Docker+ELK打造微服务日志收集平台
- 数据采集神器Telegraf对接开源日志服务器GrayLog
- springboot脱敏控件再升级(支持日志脱敏)
- TKE/EKS集群通过logrotate切割nginx-ingress访问日志
- clickhouse导入原始nginx日志数据
- 保姆级Nginx日志配置文件总结
- 状态Linux查看Nginx服务状态的简单方法(linux查看nginx)
- 使用Linux命令记录执行日志(linux命令执行日志)
- 日志Linux删除Nginx日志:简易清理方式(linux删除nginx)
- Linux删除Nginx:快速安全的方式(linux删除nginx)
- Linux下Nginx实现快速高效的网络服务(linux的nginx)
- 配置Linux下删除Nginx配置的步骤(linux删除nginx)
- 如何在 Linux 中管理日志
- Nginx网站架构实战——08、nginx Rewrite语法详解
- Nginx网站架构实战——05、nginx定时任务完成日志切割
- Nginx网站架构实战——03、nginx虚拟主机配置
- Nginx网站架构实战——01、nginx介绍及编译安装
- 用Shell脚本分析Nginx日志
- 《Nginx官方文档》调试日志
- 深入理解Oracle的操作日志分析(oracle查看操作日志)
- 解读Linux服务器错误日志 快速排除故障的关键步骤(linux服务器错误日志)
- MongoDB操作记录:解决问题的必要细节(mongodb 操作日志)
- 记录Oracle主键建立的痕迹日志追踪(oracle主键建立日志)
- Oracle10启动日志记录活动管理(oracle10开启日志)
- log4net教程日志分类和自动维护示例
- Python分析Nginx访问日志并保存到MySQL数据库实例