在 Debian 系统上备份 Nginx 日志,常见做法有几种,从手动备份到自动轮转备份。下面按推荐程度给你一个完整说明。
logrotateDebian 默认已经为 Nginx 配置了 logrotate,这是最推荐的方式。
cat /etc/logrotate.d/nginx
典型内容示例:
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
systemctl reload nginx > /dev/null 2>&1
endscript
}
daily:每天轮转rotate 14:保留 14 个备份compress:压缩旧日志(.gz)postrotate:轮转后平滑重启 Nginx,避免日志继续写入旧文件logrotate -f /etc/logrotate.d/nginx
ls -lh /var/log/nginx/
你会看到类似:
access.log
access.log.1
access.log.2.gz
error.log
error.log.1
error.log.2.gz
✅ 结论:如果你只是想“备份 Nginx 日志并防止磁盘爆满”,什么都不用做,Debian 默认已经帮你做好了。
cp /var/log/nginx/access.log /backup/nginx/access-$(date +%F).log
cp /var/log/nginx/error.log /backup/nginx/error-$(date +%F).log
truncate -s 0 /var/log/nginx/access.log
truncate -s 0 /var/log/nginx/error.log
或:
nginx -s reopen
假设你的 Nginx 日志在:
/var/log/nginx/custom/*.log
nano /etc/logrotate.d/nginx-custom
内容示例:
/var/log/nginx/custom/*.log {
daily
rotate 30
compress
missingok
notifempty
create 0640 www-data adm
postrotate
systemctl reload nginx
endscript
}
测试:
logrotate -d /etc/logrotate.d/nginx-custom
rsync 定期同步rsync -avz /var/log/nginx/ user@backup-server:/backup/nginx/
配合 cron:
crontab -e
0 2 * * * rsync -avz /var/log/nginx/ user@backup:/backup/nginx/
检查:
systemctl status logrotate
手动测试:
logrotate -vf /etc/logrotate.d/nginx
一定要:
nginx -s reopen
或 systemctl reload nginx
| 场景 | 推荐方式 |
|---|---|
| 默认 Debian + Nginx | ✅ logrotate(默认已配置) |
| 自定义日志路径 | ✅ 新建 logrotate 配置 |
| 临时备份 | cp + truncate |
| 远程归档 | rsync + cron |
如果你愿意,我可以:
直接把你的 Nginx 版本 + Debian 版本 发我即可。