在 Linux 上备份 Nginx 日志,常见做法有手动备份、脚本+定时任务、logrotate、远程备份几种方式。下面从简单到规范逐步说明。
默认通常在:
/var/log/nginx/access.log
/var/log/nginx/error.log
也可能在 nginx.conf 或虚拟主机配置中自定义路径:
access_log /data/logs/nginx/access.log;
cp /var/log/nginx/access.log /backup/nginx/access_$(date +%Y%m%d).log
或压缩:
tar czf /backup/nginx/nginx_logs_$(date +%Y%m%d).tar.gz /var/log/nginx/
⚠️ 注意:直接 cp 不会清空原日志,日志会继续增大。
Nginx 通常已集成 logrotate。
/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 # 强制执行
✅ 优点:
/usr/local/bin/nginx_log_backup.sh#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR=/backup/nginx
mkdir -p $BACKUP_DIR
mv /var/log/nginx/access.log $BACKUP_DIR/access_$DATE.log
mv /var/log/nginx/error.log $BACKUP_DIR/error_$DATE.log
# 通知 Nginx 重新打开日志
kill -USR1 $(cat /var/run/nginx.pid)
# 压缩
gzip $BACKUP_DIR/*.log
chmod +x /usr/local/bin/nginx_log_backup.sh
crontab -e
每天凌晨 0 点:
0 0 * * * /usr/local/bin/nginx_log_backup.sh
rsync -avz /backup/nginx/ user@backup-server:/data/nginx_backup/
scp /backup/nginx/*.gz backup@192.168.1.100:/backup/nginx/
kill -USR1 让 Nginx 重新打开日志如果你愿意,我可以:
你目前是 单机 Nginx 还是集群?日志量大吗?