当 NGINX 的日志文件变得过大时,通常的做法是进行日志切片(log rotation),这样可以防止单个日志文件过大,便于管理和存储。
而 NGINX 自身或者其扩展的模块均不支持类似的功能。 所以 NGINX 日志切片通常需要依赖外部工具来实现,比如 Linux 系统中常用的 logrotate
。以下是如何使用 logrotate
对 NGINX 日志进行切片的步骤:
1.1 安装 logrotate
如果系统中尚未安装 logrotate
,可以通过包管理器进行安装。例如,在基于 Debian 的系统上,可以使用:
1 | sudo apt-get install logrotate |
1.2 配置 logrotate
为 NGINX 日志
logrotate
的配置通常位于 /etc/logrotate.d/
目录。你可以创建或修改一个配置文件专门用于 NGINX。以下是一个基本的配置示例:
1 | sudo nano /etc/logrotate.d/nginx |
在打开的编辑器中,添加以下内容:
1 | /var/log/nginx/*.log { |
这个配置的作用是:
- 每天对
/var/log/nginx/*.log
下的所有日志文件进行轮换。 - 保留 7 天的日志备份。
- 轮换后的日志进行压缩,且在下一次轮换之前不进行压缩。
- 创建新的日志文件时使用指定的权限。
postrotate
脚本在完成日志轮换后发送 USR1 信号给 NGINX 主进程,这会令 NGINX 重新打开日志文件,确保日志写入不会中断。
1.3 测试 logrotate
配置
完成配置后,可以手动运行 logrotate
来测试配置是否有效:
1 | sudo logrotate -v /etc/logrotate.d/nginx |
这条命令会以详细模式运行 logrotate
,显示轮换过程中的详细信息,有助于确认配置是否按预期执行。
1.4 自动执行
logrotate
通常由 cron 定期自动执行。你可以检查系统的 cron 任务来确认 logrotate
的执行频率:
1 | cat /etc/cron.daily/logrotate |
这样设置之后,NGINX 的日志文件就会定期自动切片和管理,减少了管理大量日志文件的复杂性和对系统性能的影响。