备份 Nginx 日志文件(如 access.log、error.log 等)是运维中的常见需求,主要用于防止日志过大、便于审计和故障排查。下面按常见场景给你几种成熟做法,从简单到规范。
适合临时操作,不建议长期使用。
# 备份前可先创建目录
mkdir -p /backup/nginx_logs/$(date +%Y%m%d)
# 复制日志
cp /var/log/nginx/access.log /backup/nginx_logs/20260121/access.log
cp /var/log/nginx/error.log /backup/nginx_logs/20260121/error.log
⚠️ 注意:
logrotate这是 最标准、最推荐 的方式。
大多数系统已自带:
/etc/logrotate.d/nginx
内容示例:
/var/log/nginx/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
systemctl reload nginx > /dev/null 2>&1
endscript
}
| 参数 | 含义 |
|---|---|
| daily | 每天轮转 |
| rotate 30 | 保留 30 份 |
| compress | 压缩旧日志 |
| delaycompress | 延迟压缩 |
| reload nginx | 重新打开日志文件 |
logrotate -vf /etc/logrotate.d/nginx
✅ 优点:
适合需要异地备份 / 同步到对象存储。
#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR=/backup/nginx_logs/$DATE
mkdir -p $BACKUP_DIR
cp /var/log/nginx/access.log $BACKUP_DIR/access.log
cp /var/log/nginx/error.log $BACKUP_DIR/error.log
# 可选:压缩
tar -czf $BACKUP_DIR.tar.gz -C /backup/nginx_logs $DATE
rm -rf $BACKUP_DIR
crontab -e
0 2 * * * /usr/local/bin/nginx_log_backup.sh
每天凌晨 2 点执行
❌ 不推荐:
echo "" > access.log
✅ 推荐:
cp access.log access.log.bak
: > access.log
或者:
mv access.log access.log.old
systemctl reload nginx
| 场景 | 方案 |
|---|---|
| 日志量大 | 日志接入 ELK / Loki |
| 多台服务器 | 集中收集(rsyslog / filebeat) |
| 云环境 | 备份到 OSS / S3 |
| 合规审计 | 日志不可篡改(WORM) |
✅ 生产环境首选:logrotate
✅ 日志不要长期保留在本地
✅ 定期清理旧备份
✅ 备份前 reload nginx,不要直接删除日志
如果你愿意,可以告诉我:
我可以帮你写一套完全适配你环境的备份方案。