温馨提示×

如何备份linux nginx日志

小樊
46
2026-09-08 15:11:35
栏目: 智能运维

在 Linux 上备份 Nginx 日志,常见做法有手动备份、脚本+定时任务、logrotate、远程备份几种方式。下面从简单到规范逐步说明。


一、先确认 Nginx 日志位置

默认通常在:

/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 不会清空原日志,日志会继续增大。


三、使用 logrotate(推荐 ✅)

Nginx 通常已集成 logrotate。

1. 查看配置

/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
}

2. 手动测试

logrotate -d /etc/logrotate.d/nginx   # 模拟
logrotate -f /etc/logrotate.d/nginx  # 强制执行

✅ 优点:

  • 自动切割
  • 自动压缩
  • 自动清理旧日志
  • 不中断 Nginx

四、自定义备份脚本 + cron(灵活)

1. 编写脚本 /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

2. 加执行权限

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

3. 加入定时任务

crontab -e

每天凌晨 0 点:

0 0 * * * /usr/local/bin/nginx_log_backup.sh

五、远程备份(更安全)

方式 1:rsync

rsync -avz /backup/nginx/ user@backup-server:/data/nginx_backup/

方式 2:scp

scp /backup/nginx/*.gz backup@192.168.1.100:/backup/nginx/

六、注意事项 ⚠️

  1. 不要直接删 access.log
  2. 必须用 kill -USR1 让 Nginx 重新打开日志
  3. 备份目录权限要安全(避免日志泄露)
  4. 大流量服务器建议按小时或大小切割

如果你愿意,我可以:

  • 帮你写 适合你服务器的 logrotate 配置
  • 或给你一个 自动上传到对象存储(OSS/S3)的脚本

你目前是 单机 Nginx 还是集群?日志量大吗?

0