温馨提示×

Debian如何清理Nginx日志

小樊
44
2026-07-13 10:42:09
栏目: 智能运维

在 Debian 系统上清理或管理 Nginx 日志(通常是 access.logerror.log),可以从手动清理、日志轮转、自动清理三个层面来做。下面按常用场景说明。


一、Nginx 日志默认位置

一般位于:

/var/log/nginx/

常见文件:

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

二、手动清理(不推荐直接 rm)

✅ 正确方式(清空日志,不删除文件)

sudo truncate -s 0 /var/log/nginx/access.log
sudo truncate -s 0 /var/log/nginx/error.log

原因:Nginx 仍持有文件句柄,rm 后不会立刻释放磁盘空间。


❌ 不推荐方式

sudo rm /var/log/nginx/access.log

可能导致:

  • Nginx 仍写入旧 inode
  • 磁盘空间不释放
  • 需要重启 Nginx 才能恢复

三、使用 logrotate(✅ 推荐)

Debian 默认已为 Nginx 配置 logrotate

1️⃣ 查看 logrotate 配置

cat /etc/logrotate.d/nginx

典型内容示例:

/var/log/nginx/*.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        systemctl reload nginx > /dev/null 2>&1
    endscript
}

2️⃣ 参数说明

参数 含义
daily 每天轮转
rotate 7 保留 7 份
compress 压缩旧日志
notifempty 空文件不轮转
reload nginx 不中断服务

3️⃣ 手动触发 logrotate

sudo logrotate -f /etc/logrotate.d/nginx

四、设置日志自动清理策略(按大小 / 天数)

✅ 按大小轮转(例如超过 100MB)

修改 /etc/logrotate.d/nginx

size 100M

并去掉 daily 或改为:

daily
size 100M

✅ 只保留 30 天日志

rotate 30

五、完全禁用 Nginx 日志(不推荐生产)

1️⃣ 关闭访问日志

access_log off;

2️⃣ 关闭错误日志(不建议)

error_log /dev/null;

修改后:

sudo nginx -t
sudo systemctl reload nginx

六、一键清理脚本(可选)

#!/bin/bash
find /var/log/nginx -name "*.log" -type f -exec truncate -s 0 {} \;
systemctl reload nginx

七、清理后检查磁盘

df -h
du -sh /var/log/nginx/*

✅ 推荐方案总结

场景 推荐方式
日常维护 logrotate
临时清理 truncate
防止磁盘爆满 限制日志大小 + 保留天数
高并发服务器 关闭 access_log 或采样

如果你愿意,可以告诉我:

  • 你的 Nginx 版本
  • 是否是 Docker / 云服务器
  • 磁盘使用情况(df -h

我可以帮你给出最合适的清理方案

0