Nginx提供了灵活的日志记录功能,可以帮助您监控网站流量和排查问题。以下是配置Nginx访问日志和错误日志的详细方法:
在nginx.conf
或虚拟主机配置文件中添加或修改以下内容:
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;
}
error_log /var/log/nginx/error.log warn;
Nginx错误日志支持以下级别(从低到高):
- debug
(最详细)
- info
- notice
- warn
(默认)
- error
- crit
- alert
- emerg
(最严重)
error_log /var/log/nginx/error.log debug; # 开发环境使用
error_log /var/log/nginx/error.log error; # 生产环境推荐
server {
listen 80;
server_name example.com;
access_log /var/log/nginx/example.com.access.log main;
error_log /var/log/nginx/example.com.error.log;
# 其他配置...
}
access_log /var/log/nginx/access.log main buffer=32k flush=5m;
map $status $loggable {
~^[23] 0; # 不记录2xx和3xx状态
default 1; # 记录其他状态
}
access_log /var/log/nginx/access.log main if=$loggable;
创建/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
}
常用变量:
- $remote_addr
- 客户端IP
- $remote_user
- 认证用户名
- $time_local
- 本地时间
- $request
- 请求行(GET / HTTP/1.1)
- $status
- 响应状态码
- $body_bytes_sent
- 发送给客户端的字节数
- $http_referer
- 来源URL
- $http_user_agent
- 客户端浏览器信息
- $http_x_forwarded_for
- 代理服务器IP链
error
级别错误日志nginx
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"}';
配置完成后,记得测试并重新加载Nginx配置:
sudo nginx -t
sudo systemctl reload nginx