温馨提示×

debian nginx日志如何归档

小樊
51
2026-09-01 09:20:20
栏目: 智能运维

在 Debian 上,Nginx 日志(通常是 /var/log/nginx/access.log 和 /var/log/nginx/error.log)最常见、最推荐的归档方式是使用 logrotate。下面从「标准做法」到「手动/自定义做法」给你讲清楚。


一、使用 logrotate(推荐 ✅)

Debian 默认已安装 logrotate,并且自带 Nginx 的 rotate 配置。

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
}

含义简要说明:

  • daily:每天归档
  • rotate 14:保留 14 份
  • compress:用 gzip 压缩
  • kill -USR1:通知 Nginx 重新打开日志(不重启)

2. 手动测试 logrotate

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

3. 修改归档策略(示例)

比如:

  • 每周归档
  • 保留 8 周
  • 压缩

编辑:

sudo nano /etc/logrotate.d/nginx

改为:

/var/log/nginx/*.log {
    weekly
    rotate 8
    compress
    delaycompress
    missingok
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

二、logrotate 执行时间(补充)

logrotate 由 cron 调用:

/etc/cron.daily/logrotate

如需自定义时间,可以用 systemd timer 或放 cron.weekly。


三、手动归档(不推荐,仅特殊场景)

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

⚠️ 必须 reload,否则 Nginx 还会写旧文件。


四、常见坑提醒

  1. 不要直接删 access.log
    • Nginx 仍持有文件句柄,磁盘不会释放
  2. 必须发 USR1 信号
    • 否则日志不会切换到新文件
  3. 权限问题
    • 日志属主通常是 www-data:adm

五、查看归档结果

ls -lh /var/log/nginx/

你会看到:

access.log
access.log.1.gz
error.log
error.log.1.gz

如果你愿意,我可以:

  • 帮你写 按大小归档 的配置
  • 配置 远程日志(rsyslog / ELK)
  • 或针对 Docker Nginx 的日志方案

直接告诉我你的使用场景即可。

0 踩