在 Debian 上,Nginx 日志(通常是 /var/log/nginx/access.log 和 /var/log/nginx/error.log)最常见、最推荐的归档方式是使用 logrotate。下面从「标准做法」到「手动/自定义做法」给你讲清楚。
Debian 默认已安装 logrotate,并且自带 Nginx 的 rotate 配置。
cat /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
}
含义简要说明:
daily:每天归档rotate 14:保留 14 份compress:用 gzip 压缩kill -USR1:通知 Nginx 重新打开日志(不重启)sudo logrotate -d /etc/logrotate.d/nginx # 模拟执行
sudo logrotate -f /etc/logrotate.d/nginx # 强制执行
比如:
编辑:
sudo nano /etc/logrotate.d/nginx
改为:
/var/log/nginx/*.log {
weekly
rotate 8
compress
delaycompress
missingok
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
logrotate 由 cron 调用:
/etc/cron.daily/logrotate
如需自定义时间,可以用 systemd timer 或放 cron.weekly。
sudo mv /var/log/nginx/access.log /var/log/nginx/access.log.$(date +%F)
sudo systemctl reload nginx
⚠️ 必须 reload,否则 Nginx 还会写旧文件。
www-data:admls -lh /var/log/nginx/
你会看到:
access.log
access.log.1.gz
error.log
error.log.1.gz
如果你愿意,我可以:
直接告诉我你的使用场景即可。