在 Linux 下备份 Nginx 日志,常见做法有手动备份、脚本定时备份、logrotate 配合备份几种方式。下面按实用程度给你介绍。
通常日志在:
/var/log/nginx/access.log
/var/log/nginx/error.log
不同发行版可能略有差异,可在 nginx.conf 中查看:
grep -R "access_log" /etc/nginx/
cp /var/log/nginx/access.log /backup/nginx/access_$(date +%F).log
适合临时使用。
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
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
logrotate -f /etc/logrotate.d/nginx
✅ 自动完成:
#!/bin/bash
BACKUP_DIR=/backup/nginx_logs
DATE=$(date +%F)
mkdir -p $BACKUP_DIR
cp /var/log/nginx/access.log $BACKUP_DIR/access_$DATE.log
cp /var/log/nginx/error.log $BACKUP_DIR/error_$DATE.log
# 可选:压缩
gzip $BACKUP_DIR/access_$DATE.log
gzip $BACKUP_DIR/error_$DATE.log
crontab -e
每天凌晨 1 点备份:
0 1 * * * /root/backup_nginx_log.sh
rsync -avz /backup/nginx_logs/ user@backup-server:/data/nginx_logs/
scp /backup/nginx_logs/*.gz backup@192.168.1.100:/data/nginx_logs/
不要直接 mv 日志
cp + > logfile 或 kill -USR1备份后清理旧日志
find /backup/nginx_logs -name "*.gz" -mtime +30 -delete
权限问题
www-data 或 nginxroot 或 sudo| 场景 | 推荐方式 |
|---|---|
| 一般服务器 | logrotate ✅ |
| 审计/合规 | logrotate + 远程备份 |
| 临时排查 | 手动 cp |
| 多台服务器 | 集中 rsync |
如果你愿意,我可以根据你系统(CentOS / Ubuntu)和 Nginx 版本写一套完整备份方案。