温馨提示×

linux如何备份nginx日志

小樊
42
2026-09-17 19:31:05
栏目: 智能运维

在 Linux 下备份 Nginx 日志,常见做法有手动备份、脚本定时备份、logrotate 配合备份几种方式。下面按实用程度给你介绍。


一、Nginx 日志默认位置

通常日志在:

/var/log/nginx/access.log
/var/log/nginx/error.log

不同发行版可能略有差异,可在 nginx.conf 中查看:

grep -R "access_log" /etc/nginx/

二、最简单:手动备份

cp /var/log/nginx/access.log /backup/nginx/access_$(date +%F).log

适合临时使用。


三、使用 logrotate(推荐 ✅)

Nginx 通常已集成 logrotate。

1. 查看配置

cat /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 -f /etc/logrotate.d/nginx

✅ 自动完成:

  • 日志切割
  • 压缩
  • 保留 N 天
  • 通知 Nginx 重新打开日志

四、自定义备份脚本(可结合 cron)

1. 备份脚本示例

#!/bin/bash
BACKUP_DIR=/backup/nginx_logs
DATE=$(date +%F)

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

# 可选:压缩
gzip $BACKUP_DIR/access_$DATE.log
gzip $BACKUP_DIR/error_$DATE.log

2. 加入定时任务

crontab -e

每天凌晨 1 点备份:

0 1 * * * /root/backup_nginx_log.sh

五、远程备份(重要日志)

使用 rsync

rsync -avz /backup/nginx_logs/ user@backup-server:/data/nginx_logs/

或使用 scp

scp /backup/nginx_logs/*.gz backup@192.168.1.100:/data/nginx_logs/

六、注意事项

  1. 不要直接 mv 日志

    • 会导致 Nginx 继续写旧文件
    • 正确方式:cp + > logfile 或 kill -USR1
  2. 备份后清理旧日志

    find /backup/nginx_logs -name "*.gz" -mtime +30 -delete
    
  3. 权限问题

    • Nginx 日志通常属 www-data 或 nginx
    • 备份脚本建议用 root 或 sudo

七、总结建议

场景 推荐方式
一般服务器 logrotate ✅
审计/合规 logrotate + 远程备份
临时排查 手动 cp
多台服务器 集中 rsync

如果你愿意,我可以根据你系统(CentOS / Ubuntu)和 Nginx 版本写一套完整备份方案。

0 踩