在 Linux 下对 Nginx 日志进行备份,常见做法有几种,从简单手动备份到自动化轮转备份。下面按实用程度给你介绍。
Nginx 日志一般位于:
/var/log/nginx/access.log/var/log/nginx/error.logcat /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 -d /etc/logrotate.d/nginx # 模拟执行
logrotate -f /etc/logrotate.d/nginx # 强制执行
✅ 优点:
cp /var/log/nginx/access.log /backup/nginx/access_$(date +%F).log
> /var/log/nginx/access.log
或:
mv /var/log/nginx/access.log /backup/nginx/access_$(date +%F).log
systemctl reload nginx
⚠️ 不推荐长期使用,容易漏
vi /usr/local/bin/nginx_log_backup.sh
内容:
#!/bin/bash
DATE=$(date +%F)
BACKUP_DIR=/backup/nginx
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
> /var/log/nginx/access.log
> /var/log/nginx/error.log
systemctl reload nginx
chmod +x /usr/local/bin/nginx_log_backup.sh
crontab -e
0 0 * * * /usr/local/bin/nginx_log_backup.sh
if [ $(du -m /var/log/nginx/access.log | cut -f1) -gt 100 ]; then
mv /var/log/nginx/access.log /backup/nginx/access_$(date +%F_%T).log
systemctl reload nginx
fi
rsync -avz /backup/nginx/ user@backup-server:/nginx_logs/
或使用 scp:
scp /backup/nginx/*.log user@ip:/data/nginx_logs/
| 场景 | 推荐方式 |
|---|---|
| 生产服务器 | ✅ logrotate |
| 临时处理 | 手动 cp + reload |
| 自定义策略 | cron + 脚本 |
| 多机集中 | logrotate + rsync |
如果你愿意,我可以: