access_log 是 Nginx 记录客户端请求的重要日志文件,以下是详细的配置方法:
access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
或关闭日志记录:
access_log off;
http {
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;
}
server {
listen 80;
server_name example.com;
access_log /var/log/nginx/example.com.access.log main;
location / {
# 配置内容
}
}
# 只记录状态码为4xx和5xx的请求
map $status $loggable {
~^[23] 0;
default 1;
}
access_log /var/log/nginx/access.log main if=$loggable;
access_log /var/log/nginx/access.log main buffer=32k flush=5m;
access_log /var/log/nginx/access.log main gzip=1;
变量 | 描述 |
---|---|
$remote_addr | 客户端IP地址 |
$remote_user | 客户端用户名(基本认证) |
$time_local | 本地时间 |
$request | 完整的请求行 |
$status | 响应状态码 |
$body_bytes_sent | 发送给客户端的字节数 |
$http_referer | 请求来源页 |
$http_user_agent | 客户端浏览器信息 |
$http_x_forwarded_for | 代理服务器IP链 |
log_format json_combined escape=json
'{'
'"time_local":"$time_local",'
'"remote_addr":"$remote_addr",'
'"remote_user":"$remote_user",'
'"request":"$request",'
'"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"'
'}';
access_log /var/log/nginx/access.log json_combined;
map $time_iso8601 $logdate {
'~^(?<ymd>\d{4}-\d{2}-\d{2})' $ymd;
default 'date-not-found';
}
access_log /var/log/nginx/access-$logdate.log main;
建议使用 logrotate 管理 Nginx 日志轮转:
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
希望这些配置示例对您有所帮助!如需更具体的配置,请提供您的具体需求。