Nginx 日志备份通常分 手动备份 和 自动定时备份,核心是按时间切割 + 压缩 + 定期清理。下面给你一套常用、稳妥的做法。
常见路径:
/var/log/nginx/access.log
/var/log/nginx/error.log
查看实际路径:
nginx -T | grep log
cp /var/log/nginx/access.log /var/log/nginx/access.log.bak
> /var/log/nginx/access.log
⚠️ 注意:
> 会清空原日志logrotate(强烈推荐)Nginx 官方和大多数 Linux 发行版都使用它。
ls /etc/logrotate.d/nginx
如果没有,可以新建:
vim /etc/logrotate.d/nginx
内容示例:
/var/log/nginx/*.log {
daily
rotate 30
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
systemctl reload nginx > /dev/null 2>&1
endscript
}
| 参数 | 含义 |
|---|---|
| daily | 每天切割 |
| rotate 30 | 保留 30 天 |
| compress | 压缩 |
| notifempty | 空日志不切割 |
| postrotate | 切割后重载 nginx |
logrotate -d /etc/logrotate.d/nginx
mv /var/log/nginx/access.log /var/log/nginx/access.log.$(date +%F)
nginx -s reopen
或:
kill -USR1 $(cat /var/run/nginx.pid)
✅ 不会丢日志
✅ 生产环境安全
vim /usr/local/bin/nginx_log_backup.sh
#!/bin/bash
LOG_DIR="/var/log/nginx"
DATE=$(date +%F)
mv $LOG_DIR/access.log $LOG_DIR/access.log.$DATE
mv $LOG_DIR/error.log $LOG_DIR/error.log.$DATE
nginx -s reopen
# 压缩 7 天前的日志
find $LOG_DIR -name "*.log.*" -mtime +7 -exec gzip {} \;
chmod +x /usr/local/bin/nginx_log_backup.sh
crontab -e
0 0 * * * /usr/local/bin/nginx_log_backup.sh
rsync -avz /var/log/nginx/ user@backup:/data/nginx_logs/
cp 后 rm 原日志(会丢)| 场景 | 推荐 |
|---|---|
| 生产环境 | logrotate |
| 临时处理 | nginx -s reopen |
| 日常运维 | crontab + 脚本 |
如果你愿意,我可以:
直接告诉我你的环境即可。