自定义Nginx访问日志内容
Nginx的访问日志默认有自己的格式,为了获取更多的访问数据,或者为了更方便的查看各输出字段的意义,可以自定义日志的内容。
▶ Nginx日志常用字段
首先了解一下Nginx日志常用字段:
------------------
参数 说明 示例
$remote_addr 客户端地址 127.0.0.1
$remote_user 客户端用户名称 -
$time_local 访问时间和时区 18/Aug/2023:12:37:26 +0800
$request 请求的URI和HTTP协议 "GET /xxx/xxx.png HTTP/1.1"
$http_host 请求地址,即浏览器中你输入的地址(IP或域名) www.x.com 127.0.0.1
$status HTTP请求状态 200
$upstream_status upstream状态 200
$body_bytes_sent 发送给客户端文件内容大小 1547
$http_referer url跳转来源 https://www.baidu.com/
$http_user_agent 用户终端浏览器等信息 Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P)
$ssl_protocol SSL协议版本 TLSv1
$ssl_cipher 交换数据中的算法 RC4-SHA
$upstream_addr 后台upstream的地址,即真正提供服务的主机地址 127.0.0.1:8080
$request_time 整个请求的总时间 0.205
$upstream_response_time 请求过程中,upstream响应时间 0.002
$http_x_forwarded_for http扩展头,记录请求端真实IP IP0, IP1, IP2
------------------
▶ 配置
直接上代码(需要定义在 /etc/nginx/nginx.conf 的 http 节点里)
------------------
http{
log_format log1 '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'$upstream_response_time $request_time '
'$upstream_response_time $request_time '
'"$http_user_agent" "$http_x_forwarded_for" ';
}
------------------
如果nginx的日志需要按该格式输出,配置如下(注意在日志路径末尾添加 log1):
access_log /opt/nginx/logs/access.log log1;
如果希望日志能以json格式输出,配置如下
------------------
http{
log_format log_json '{"remote_addr":"$remote_addr", '
'"remote_user": "$remote_user",'
'"time_local": "$time_local",'
'"request": "$request",'
'"http_host": "$http_host",'
'"status": "$status",'
'"body_bytes_sent": "$body_bytes_sent",'
'"http_referer": "$http_referer",'
'"http_user_agent": "$http_user_agent",'
'"http_x_forwarded_for": "$http_x_forwarded_for"'
'}';
}
------------------
然后在日志输出里确认按json格式输出即可:
access_log /opt/nginx/logs/access.log log_json;
我的笔记