温馨提示×

nginx日志如何清理

小樊
39
2026-08-02 18:29:06
栏目: 编程语言

Nginx 日志清理主要有 手动清理自动轮转 两种方式,推荐生产环境使用 logrotate 自动轮转。下面按常见场景说明。


一、Nginx 日志位置

常见路径:

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

确认路径:

nginx -T 2>/dev/null | grep log

二、手动清理(不推荐生产长期使用)

1️⃣ 清空日志(保留文件)

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

或:

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

✅ 不影响 Nginx 运行
❌ 文件不会变小,只是内容清空


2️⃣ 删除旧日志

rm -f /var/log/nginx/access.log.1
rm -f /var/log/nginx/*.gz

⚠️ 删除前确认 Nginx 已关闭或不再写入该文件


三、推荐方式:使用 logrotate(最规范 ✅)

1️⃣ 查看是否已配置

ls /etc/logrotate.d/nginx

2️⃣ 默认配置示例

/var/log/nginx/*.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        nginx -s reload
    endscript
}

含义:

  • daily:每天轮转
  • rotate 7:保留 7 份
  • compress:压缩历史日志
  • nginx -s reload:重新打开日志文件

3️⃣ 手动测试 logrotate

logrotate -vf /etc/logrotate.d/nginx

四、Docker 中 Nginx 日志清理

方式 1:不挂载日志目录(推荐)

日志写入容器,自动随容器生命周期管理。

方式 2:挂载宿主机

docker run -v /host/logs:/var/log/nginx nginx

清理方式:

truncate -s 0 /host/logs/access.log

或使用宿主机 logrotate。


五、高并发场景:防止日志过大

1️⃣ 关闭不需要的日志

access_log off;

2️⃣ 按条件记录

access_log /var/log/nginx/access.log combined if=$loggable;

3️⃣ 按虚拟主机分开

server {
    access_log /var/log/nginx/www_access.log;
}

六、快速排查日志异常增长

du -sh /var/log/nginx/*
ls -lh /var/log/nginx/

七、总结建议 ✅

场景 推荐方式
生产环境 ✅ logrotate
紧急清理 truncate
Docker 不挂载日志
防止暴涨 关闭/条件记录

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

  • 系统(CentOS / Ubuntu / Docker)
  • 日志大小
  • 是否高峰期

我可以给你一份 可直接使用的 logrotate 配置

0