Debian系统下Nginx日志查看与管理指南
Debian系统中,Nginx的日志文件默认存储在/var/log/nginx/目录下,主要包括两类核心日志:
access.log。error.log。若需实时监控日志的最新内容(如调试时观察实时请求或错误),可使用tail -f命令:
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
按Ctrl+C可停止实时监控。若需从日志中提取特定信息(如某一时间段的请求、包含关键字的错误),可使用grep命令:
sudo grep '2025-01-01' /var/log/nginx/access.log
sudo grep 'connection refused' /var/log/nginx/error.log
结合tail -f可实现实时筛选(如sudo tail -f /var/log/nginx/error.log | grep 'keyword')。若需查看日志文件的完整内容(如分析历史日志),可使用以下命令:
sudo cat /var/log/nginx/access.log
sudo less /var/log/nginx/error.log
在less中,按空格键翻页,按q键退出。为避免日志文件占用过多磁盘空间,需通过logrotate工具定期切割、压缩日志:
sudo apt update && sudo apt install logrotate
/etc/logrotate.d/nginx文件,添加以下内容(默认已存在,可根据需求调整):/var/log/nginx/*.log {
daily # 每天轮转一次
missingok # 若日志文件不存在也不报错
rotate 7 # 保留最近7个轮转文件
compress # 压缩旧日志(如access.log.1.gz)
delaycompress # 延迟压缩(避免压缩当天日志)
notifempty # 若日志为空则不轮转
create 0640 www-data adm # 新日志文件的权限和所有者
sharedscripts # 所有日志轮转完成后执行脚本
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 $(cat /var/run/nginx.pid) # 通知Nginx重新打开日志文件
fi
endscript
}
sudo logrotate -d /etc/logrotate.d/nginx # 模拟运行(不实际执行)
sudo logrotate -f /etc/logrotate.d/nginx # 强制立即执行
日志轮转后,旧日志会以.gz格式压缩存储,可通过gunzip命令解压查看。若Nginx日志未正确记录或需查看系统级日志(包含Nginx服务的启动、停止信息),可使用journalctl命令:
sudo journalctl -u nginx # 查看Nginx服务的所有日志
sudo journalctl -u nginx -f # 实时查看Nginx日志
sudo journalctl -u nginx --since "2025-01-01" --until "2025-01-02" # 筛选特定时间段的日志
该命令需系统启用systemd日志服务(Debian默认启用)。
若需记录更详细的日志信息(如请求时间、客户端浏览器、引用来源等),可通过修改Nginx配置文件自定义日志格式:
sudo nano /etc/nginx/nginx.conf
http块中定义日志格式:http {
log_format custom '$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 custom; # 使用自定义格式
error_log /var/log/nginx/error.log; # 错误日志保持默认
}
sudo systemctl restart nginx
自定义格式中,$remote_addr表示客户端IP,$time_local表示本地时间,$request表示请求行,$status表示HTTP状态码,$http_user_agent表示客户端浏览器信息等。