Nginx 日志自动轮转(logrotate)

 更新时间:2026年08月29日 09:47:15   作者:帷幕落秋  
本文主要介绍了Nginx 日志自动轮转(logrotate),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、实验目的

  1. 理解 logrotate 的作用:自动压缩、切割、清理旧日志,防止日志撑爆磁盘
  2. 掌握 logrotate 配置文件的编写方法(/etc/logrotate.d/ 下的规则文件)
  3. 实际验证各参数的效果:dailyrotatecompressdelaycompressmissingoknotifemptycreatepostrotate
  4. 理解"自动化"机制:logrotate 本身不定时,靠 cron 每天触发
  5. 建立运维意识:日志管理不能靠手动,必须自动化

二、实验环境

  • 系统:CentOS 7(yum 源已切换阿里云归档镜像)
  • 应用:Nginx
  • 工具:logrotate + cron

三、实验步骤

步骤 1:启动服务并制造访问日志

systemctl start nginx
for i in {1..100}; do curl -s http://127.0.0.1 > /dev/null; done
wc -l /var/log/nginx/access.log

输出: 101 行——这就是轮转的"原料"。

步骤 2:编写 logrotate 配置文件

vim /etc/logrotate.d/nginx

/var/log/nginx/access.log /var/log/nginx/error.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 644 nginx adm
    sharedscripts
    postrotate
        if [ -f /var/run/nginx.pid ]; then
            kill -USR1 `cat /var/run/nginx.pid`
        fi
    endscript
}

步骤 3:测试加载(debug 模式)

logrotate -d /etc/logrotate.d/nginx

看到 considering log /var/log/nginx/access.log 说明配置没问题。

步骤 4:第一次强制轮转

logrotate -f /etc/logrotate.d/nginx
ls -lh /var/log/nginx/

现象对应参数说明
新的 access.log 属主是 nginx:adm、权限 -rw-r--r--create 644 nginx adm轮转后按指定权限属主重建日志 ✅
access.log.1 还是 9.0K、没变 .gzdelaycompress等下一次轮转才压缩 ✅
error.log 是空的、没有 error.log.1notifempty空日志不轮转 ✅

步骤 5:第二次轮转(意外收获:验证 notifempty)

logrotate -f /etc/logrotate.d/nginx
ls -lh /var/log/nginx/

现象: 输出一模一样,什么都没发生。

原因: 第一次轮转后新 access.log 是空的(0 字节),notifempty 检查到空日志直接跳过——再次验证 notifempty 在工作

步骤 6:制造新日志再轮转(验证 compress)

for i in {1..50}; do curl -s http://127.0.0.1 > /dev/null; done
wc -l /var/log/nginx/access.log     # 输出:50
logrotate -f /etc/logrotate.d/nginx
ls -lh /var/log/nginx/

效果: 之前 9.0K 的日志被压缩成 158 字节(压缩率 98%),compress 实锤生效。

文件说明
access.log(空,nginx:adm)create 新建的当前日志
access.log.1(4.5K,未压缩)delaycompress:等下次才压缩
access.log.2.gz(158 字节)compress:上上次的已压缩
error.log(空)notifempty:一直跳过

步骤 7:模拟 8 天,验证 rotate 7 上限

for i in {1..8}; do
  echo "log line $i" >> /var/log/nginx/access.log
  logrotate -f /etc/logrotate.d/nginx
done
ls /var/log/nginx/ | grep access

预期: 只看到 access.log + access.log.1 ~ access.log.7.gz,没有 .8——最旧的一份被自动删除,rotate 7 生效。

步骤 8:验证 postrotate(nginx 正常写新日志)

curl -s http://127.0.0.1 > /dev/null
tail -n 2 /var/log/nginx/access.log

能看到新访问记录写入 access.log,说明 kill -USR1 让 nginx 重新打开了新日志文件。

步骤 9:理解自动化机制

cat /etc/cron.daily/logrotate

logrotate 每天凌晨由 cron 自动执行——配置写好就不用管了。

四、实验现象汇总

参数验证证据
daily配置中声明,cron 每天触发
rotate 7循环 8 次后只有 7 份历史
compress9.0K → 158 字节
delaycompress.1 保持未压缩
missingok / notifempty空日志跳过(error.log)
create 644 nginx adm新日志属主 nginx:adm、权限 644
postrotate轮转后 curl 仍写入 access.log

五、实验总结

1. logrotate 的本质:

日志轮转 = 触发 → 检查 → 改名 → 压缩 → 通知服务 → 清理,每天自动循环一次,让磁盘只保留最近 N 份日志。

2. 参数记忆口诀:

  • rotate 7 管"留几份",compress 管"压不压",delaycompress 管"晚点压"
  • missingok 管"没有也不报错",notifempty 管"空的就不切"
  • create 管"切完建新文件",postrotate 管"切完通知服务"

3. 踩过的两个坑(也是知识点):

  • 空日志不轮转:notifempty 生效时,连续 -f 看似"没反应",要先有日志才能轮转
  • delaycompress 的副作用:历史中最新一份永远是 .1 未压缩,压缩的是更早的

4. 运维意义:

日志不管理的下场是磁盘被撑爆、业务中断;配置一次 logrotate,就能永久自动化——用最小的成本,避免最大的事故。

到此这篇关于Nginx 日志自动轮转(logrotate)的文章就介绍到这了,更多相关Nginx 日志自动轮转内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Nginx 缓存系统 proxy_cache工作原理解析

    Nginx 缓存系统 proxy_cache工作原理解析

    Nginx 的 proxy_cache 模块允许 Nginx 作为反向代理服务器时缓存后端服务器的响应,本文给大家介绍Nginx 缓存系统 proxy_cache的工作原理,感兴趣的朋友跟随小编一起看看吧
    2024-12-12
  • Nginx实现404错误自动跳转到首页的配置过程

    Nginx实现404错误自动跳转到首页的配置过程

    当用户在访问网站的过程中遇到404错误时,通常情况下应该显示一个友好的错误页面,而不是仅仅显示一个简单的错误提示,在Nginx中,可以通过配置来实现404错误自动跳转到首页的功能,下面将详细介绍如何进行配置,需要的朋友可以参考下
    2023-12-12
  • nginx容器配置文件独立的实现

    nginx容器配置文件独立的实现

    本文主要介绍了nginx容器配置文件独立,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • 前端如何通过nginx访问本地端口

    前端如何通过nginx访问本地端口

    这篇文章主要介绍了前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • nginx校验指定conf文件是否正确的方法

    nginx校验指定conf文件是否正确的方法

    校验 Nginx 指定配置文件的语法是否正确,是保证 Nginx 服务稳定运行的关键一步,可以使用 Nginx 内置的 -t 测试参数,配合 -c 参数来指定配置文件,下面小编给大家详细介绍一下,需要的朋友可以参考下
    2025-08-08
  • CentOS利用Nginx搭建下载功能服务器

    CentOS利用Nginx搭建下载功能服务器

    这篇文章主要介绍了CentOS利用Nginx搭建下载功能服务器,需要的朋友可以参考下
    2017-06-06
  • nginx限速配置的三种方法(limit_req、limit_conn、limit_rate)

    nginx限速配置的三种方法(limit_req、limit_conn、limit_rate)

    本文主要介绍了nginx限速配置的三种方法,主要包括limit_req、limit_conn、limit_rate,本文就详细的介绍一下如何使用,感兴趣的可以了解一下
    2023-08-08
  • Linux查看nginx安装目录和配置文件路径的实现

    Linux查看nginx安装目录和配置文件路径的实现

    本文主要介绍了Linux查看nginx安装目录和配置文件路径的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • 深入解析nginx-proxy/acme-companion高级部署方案

    深入解析nginx-proxy/acme-companion高级部署方案

    nginx-proxy/acme-companion项目提供了一种优雅的解决方案,能够自动为Docker容器管理的服务提供HTTPS支持,本文将重点介绍该项目的高级部署模式,帮助开发者构建更安全、更灵活的容器化Web服务环境,感兴趣的可以了解一下
    2026-05-05
  • Nginx前端页面刷新后出现404的原因与解决方案

    Nginx前端页面刷新后出现404的原因与解决方案

    这篇文章主要来为大家详细介绍一下Nginx前端页面刷新后出现404 Not Found的原因与对应的解决方案,有需要的小伙伴可以根据情况参考一下
    2025-03-03

最新评论