Nginx 日志轮转怎么做:用 logrotate 自动压缩并切换日志

Theo
Theo
发布时间:2026-08-24| 41人浏览过
原创

前言

在 Nginx 服务器上,访问日志和错误日志会持续增长;如果长期不处理,磁盘占用和后续排查都会变得麻烦。比较稳妥的做法是交给 logrotate 自动轮转,本文按“检查工具、写配置、理解关键参数、执行测试”四步梳理,读完后可以判断这套配置是否适合自己的日志目录、用户权限和轮转频率。

在 Nginx 服务器上,访问日志和错误日志会持续增长;如果长期不处理,磁盘占用和后续排查都会变得麻烦。比较稳妥的做法是交给 logrotate 自动轮转,本文按“检查工具、写配置、理解关键参数、执行测试”四步梳理,读完后可以判断这套配置是否适合自己的日志目录、用户权限和轮转频率。

先确认系统里有 logrotate

大多数 Linux 发行版都会预装 logrotate。如果系统里没有,再用包管理器安装即可,常见方式包括 apt-get 或 yum。

确认完工具存在后,就可以单独给 Nginx 建一份轮转规则,避免和其他服务混在一起管理。

在 /etc/logrotate.d/ 下创建 Nginx 配置

先创建配置文件:

sudo touch /etc/logrotate.d/nginx

然后把下面这段内容写入文件:

/var/log/nginx/*.log {
daily
missingok
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}

这份配置的目标很直接:匹配 /var/log/nginx/ 目录下所有 .log 文件,按天轮转,保留写入连续性,并把旧日志压缩保存。

这份配置里的关键参数分别做什么

日志匹配与轮转频率

/var/log/nginx/*.log 用来指定参与轮转的日志文件;daily 表示每天轮转一次。如果业务量不大,也可以按需要改成 weekly 或 monthly。

Nginx 日志轮转测试结果流程图
手动测试后的结果检查手动执行一次 `logrotate -f`,可以直接验证旧日志是否被压缩、新日志是否成功创建。
Nginx 日志轮转配置结构示意图
Nginx 日志轮转配置结构图把常用 logrotate 选项拆成四组,更容易检查路径、频率、压缩和重开日志是否配置到位。

避免无意义报错和空轮转

missingok 的作用是日志文件不存在时直接跳过,避免报错;notifempty 表示空日志不轮转,减少无用文件。

压缩与延迟压缩

compress 会把轮转后的旧日志压缩成 .gz 文件,节省磁盘空间。delaycompress 则会把压缩动作推迟到下一轮,这样刚被切走的上一份日志不会立刻压缩,更适合还可能被后续流程读取的场景。

新日志文件权限与后置脚本

create 0640 www-data adm 表示轮转后立即创建新的日志文件,权限为 0640,属主是 www-data,属组是 adm。这里的用户和用户组要和你的 Nginx 实际运行身份匹配,否则新日志文件可能无法正常写入。

sharedscripts 表示即使匹配到多个日志文件,也只执行一次 postrotate 脚本。后面的脚本会检查 /var/run/nginx.pid 是否存在;如果存在,就执行:

kill -USR1 `cat /var/run/nginx.pid`

这一步很关键。它会向 Nginx 主进程发送 USR1 信号,通知 Nginx 重新打开日志文件,这样后续日志才能继续写入新文件,而不是仍然占着已经轮转出去的旧文件。

如何强制测试并确认结果

配置保存后,可以先手动触发一次:

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

-f 表示强制执行一次轮转,不等待既定周期。执行成功后,通常能看到两类结果:旧日志被处理并压缩为 .gz 文件,同时原位置生成新的空日志文件,供 Nginx 继续写入。

后续只要系统的 logrotate 定时任务正常运行,这套规则就会按设定频率自动生效;需要临时手动执行时,仍然可以继续使用同一条 sudo logrotate -f /etc/logrotate.d/nginx 命令。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。