☰
Nginx日志切分
2026/10/15 17:28:24 网站建设 项目流程

nginx日志如果不切分,会导致access.log一直很大,如果开启了debug 输出request_body日志会刷的特别快,很可能很快达到几十个G,配置低的服务器可能磁盘就100%了,接口504 game over了,所以对于nginx的access和error日志都需要做每天的日志切分,对于历史日志做定期清理。

(1)在/etc/logrotate.d目录下增加nginx配置文件

cd /ec/logrotate.d

vim nginx

添加如下内容:

#具体nginx日志路径依项目而定 /usr/local/nginx/nginx-1.16.1/logs/*.log { daily # 轮转频率:每天 missingok # 如果日志不存在,不报错 rotate 14 # 保留14个旧日志文件 compress # 压缩旧日志(gzip) delaycompress # 延迟压缩(下一个周期压缩) notifempty # 空日志不轮转 create 646 nginx adm # 创建新日志的权限和所有者 sharedscripts # 所有日志处理完再执行脚本 postrotate nginx -s reload #重启nginx endscript }

/etc/logrotate.d/是Linux 系统中管理日志轮转的核心目录。

  • 位置:/etc/logrotate.d/是 logrotate 服务的配置目录

  • 主配置:/etc/logrotate.conf是全局配置文件

  • 子配置:/etc/logrotate.d/包含各个应用程序的独立配置文件

  • 用途:自动管理日志文件,防止日志过大占满磁盘

1. 轮转频率

bash

daily # 每天轮转 weekly # 每周轮转 monthly # 每月轮转 size 100M # 大小达到100M时轮转

2. 保留策略

bash

rotate 7 # 保留7个旧日志文件 maxage 30 # 删除超过30天的日志 maxsize 100M # 单个日志最大100M

3. 压缩设置

bash

compress # 使用gzip压缩 nocompress # 不压缩 compresscmd /bin/bzip2 # 指定压缩工具 compressext .bz2 # 指定扩展名 delaycompress # 延迟一个周期压缩

4. 文件处理

bash

create 0640 user group # 创建新日志的权限 copytruncate # 复制后清空(不需要重启服务) nocreate # 不创建新日志 dateext # 使用日期作为后缀 dateformat .%Y%m%d # 日期格式

5. 脚本钩子

bash

prerotate # 轮转前执行的命令 endscript postrotate # 轮转后执行的命令(如重启服务) endscript firstaction # 第一次轮转时执行 endscript

(2)添加定期清理日志的crontab定时任务

crontab -e 编辑定时任务,添加如下命令

0 1 * * * /usr/bin/find /usr/local/nginx/nginx-1.16.1/logs/ -name "*.gz" -mtime +5 | xargs -i /usr/bin/rm -irf {}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询