温馨提示×

nginx日志怎么备份

小樊
51
2026-07-07 14:59:18
栏目: 编程语言

Nginx 日志备份通常分 手动备份自动定时备份,核心是按时间切割 + 压缩 + 定期清理。下面给你一套常用、稳妥的做法。


一、先确认 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

⚠️ 注意:

  • > 会清空原日志
  • 生产环境不建议直接 cp + 清空,可能丢日志

三、推荐方式:日志切割(最常用 ✅)

方法 1:使用 logrotate(强烈推荐)

Nginx 官方和大多数 Linux 发行版都使用它。

1️⃣ 查看已有配置

ls /etc/logrotate.d/nginx

如果没有,可以新建:

2️⃣ 创建 logrotate 配置

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

3️⃣ 测试

logrotate -d /etc/logrotate.d/nginx

四、手动切割日志(不用 logrotate)

mv /var/log/nginx/access.log /var/log/nginx/access.log.$(date +%F)
nginx -s reopen

或:

kill -USR1 $(cat /var/run/nginx.pid)

✅ 不会丢日志
✅ 生产环境安全


五、自动定时备份(crontab)

1️⃣ 写脚本

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 {} \;

2️⃣ 加执行权限

chmod +x /usr/local/bin/nginx_log_backup.sh

3️⃣ 加入定时任务

crontab -e
0 0 * * * /usr/local/bin/nginx_log_backup.sh

六、备份到远程(可选)

rsync -avz /var/log/nginx/ user@backup:/data/nginx_logs/

七、常见错误 ❌

  • 直接 cprm 原日志(会丢)
  • 没 reload nginx,日志不写入新文件
  • 忘记清理旧日志,磁盘爆满

八、推荐方案总结 ✅

场景 推荐
生产环境 logrotate
临时处理 nginx -s reopen
日常运维 crontab + 脚本

如果你愿意,我可以:

  • ✅ 帮你写 适合你系统的 logrotate 配置
  • ✅ 给你一个 Docker / Kubernetes 场景的备份方案
  • ✅ 按 日志量大小切割 而不是按天

直接告诉我你的环境即可。

0