温馨提示×

linux nginx日志如何备份

小樊
44
2026-09-05 17:43:16
栏目: 智能运维

在 Linux 下对 Nginx 日志进行备份,常见做法有几种,从简单手动备份自动化轮转备份。下面按实用程度给你介绍。


一、最推荐方式:使用 logrotate(标准做法)

Nginx 日志一般位于:

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

1. 查看是否已有 logrotate 配置

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

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

✅ 优点:

  • 自动按天/大小切割
  • 自动压缩
  • 自动清理旧日志
  • 不中断 Nginx(USR1 信号)

二、手动备份(临时/一次性)

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

或:

mv /var/log/nginx/access.log /backup/nginx/access_$(date +%F).log
systemctl reload nginx

⚠️ 不推荐长期使用,容易漏


三、按时间自动备份(cron)

1. 编写备份脚本

vi /usr/local/bin/nginx_log_backup.sh

内容:

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

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

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

systemctl reload nginx

2. 加执行权限

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

3. 加入 cron

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

四、按日志大小备份(进阶)

if [ $(du -m /var/log/nginx/access.log | cut -f1) -gt 100 ]; then
    mv /var/log/nginx/access.log /backup/nginx/access_$(date +%F_%T).log
    systemctl reload nginx
fi

五、远程备份(可选)

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

或使用 scp

scp /backup/nginx/*.log user@ip:/data/nginx_logs/

六、推荐方案总结

场景 推荐方式
生产服务器 ✅ logrotate
临时处理 手动 cp + reload
自定义策略 cron + 脚本
多机集中 logrotate + rsync

如果你愿意,我可以:

  • 帮你写一份完整的 logrotate 配置
  • 或按你的 Nginx 路径 / 系统版本 定制方案

0