access_log 是 Nginx 中用于记录客户端访问日志的重要指令。以下是关于如何配置 access_log 的详细信息:
access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
或关闭日志记录:
access_log off;
access_log /var/log/nginx/access.log;
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
access_log /var/log/nginx/access.log main;
access_log /var/log/nginx/access.log main buffer=32k;
access_log /var/log/nginx/access.log main gzip;
access_log /var/log/nginx/access.log main if=$loggable;
server {
access_log /var/log/nginx/example.com.access.log main;
location /private/ {
access_log /var/log/nginx/private.access.log main;
}
}
Nginx 提供了许多内置变量可用于日志格式:
$remote_addr
- 客户端IP地址$remote_user
- 客户端用户名(用于基本认证)$time_local
- 本地时间$request
- 请求行(GET / HTTP/1.1)$status
- 响应状态码$body_bytes_sent
- 发送给客户端的字节数$http_referer
- 来源页面$http_user_agent
- 客户端浏览器信息$http_x_forwarded_for
- 代理服务器IP$request_time
- 请求处理时间(秒)$upstream_response_time
- 后端服务器响应时间通常配合 logrotate 使用,示例配置 /etc/logrotate.d/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
}
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",'
'"request_time":"$request_time",'
'"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 $status $loggable {
~^[23] 0; # 不记录2xx和3xx响应
default 1;
}
access_log /var/log/nginx/errors.log main if=$loggable;
对于高流量网站,使用缓冲日志:
access_log /var/log/nginx/access.log main buffer=64k flush=5m;
考虑将静态资源请求记录到单独的文件或完全禁用:
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
access_log off;
}
使用 syslog 将日志直接发送到远程日志服务器:
access_log syslog:server=10.0.0.1:514,facility=local7,tag=nginx,severity=info main;
希望这些信息对您配置 Nginx 访问日志有所帮助!