nginx中的日志切割详解

 更新时间:2025年11月17日 17:08:49   作者:bjzhang75  
Nginx日志切割是定期将访问日志和错误日志分割成多个文件,以优化性能、便于管理和分析,常见的实现方法包括使用logrotate工具和编写自定义脚本,解决常见的问题如Nginx不再写入新日志和权限问题,需要确保正确的信号发送和权限设置

Nginx 日志切割基础概念

Nginx日志切割是指定期将 Nginx 的访问日志和错误日志分割成多个文件,以便于管理和分析。

日志切割有助于防止日志文件过大,影响服务器性能,并且便于进行日志归档和分析。

相关优势

  • 性能优化:避免单个日志文件过大,减少磁盘I/O压力
  • 易于管理:分割后的日志文件更易于备份和归档。
  • 便于分析:可以针对特定时间段的日志进行分析,提高问题排查效率。

类型

  • 按大小切割:当日志文件达到指定大小时进行切割。
  • 按时间切割:按天、小时等时间单位进行日志切割。

应用场景

  • 高流量网站:需要频繁处理大量访问请求的网站。
  • 日志分析:需要定期分析日志数据以监控系统性能和安全状况。
  • 合规性要求:某些行业对日志保存有特定的时间要求和格式。

实现方法

1、使用 logrotate工具

logrotate是一个常用的日志管理工具,可以配置自动切割 Nginx 日志。

配置示例:

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

解释:

  • daily:每天切割一次。
  • rotate 14:保留最近14天的日志文件。
  • compress:压缩旧的日志文件。
  • create 0640 www-data adm:创建新日志文件时设置权限和所有者。
  • postrotate:切割后重新加载 Nginx 配置。

2、使用脚本手动切割

也可以编写自定义脚本来实现日志切割。

示例脚本:

#!/bin/bash
#Nginx日志文件所在目录
LOG_PATH=/data/nginx/logs/
#获取昨天的日期
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
#获取pid文件路径
PID=/var/run/nginx.pid
cd ${LOG_PATH}
#分割日志
mv access.log access-${YESTERDAY}.log
tar -zcvf access-${YESTERDAY}.log.tar.gz access-${YESTERDAY}.log --remove-files
#向Nginx主进程发送USR1信号,重新打开日志文件
kill -USR1 `cat ${PID}`

解释:

检查日志文件大小,如果超过10MB,则进行切割。

使用时间戳命名新文件,并重新创建原日志文件。

发送 USR1 信号给 Nginx 进程,使其重新打开日志文件。

遇到的问题及解决方法

日志切割后 Nginx 不再写入新日志

原因:Nginx 进程可能没有正确重新打开日志文件。

解决方法:

  • 确保postrotate脚本中发送了正确的信号(如 USR1)给 Nginx 进程。
  • 检查 Nginx 配置文件中是否有错误,导致无法重新打开日志文件。

日志文件权限问题

原因:切割后的日志文件权限设置不正确,导致 Nginx 无法写入。

解决方法:

  • logrotate配置中使用create选项设置正确的权限和所有者。
  • 确保 Nginx 进程运行的用户有权限写入日志文件。
  • 通过以上方法,可以有效实现 Nginx 日志切割,并解决常见的问题。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 详解nginx前端根据$remote_addr分发方法

    详解nginx前端根据$remote_addr分发方法

    这篇文章主要介绍了详解nginx前端根据$remote_addr分发方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • 详解Nginx反向代理到Tomcat服务器

    详解Nginx反向代理到Tomcat服务器

    本篇文章主要介绍了详解Nginx反向代理到Tomcat服务器,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • nginx使用IPV6的相关配置项介绍

    nginx使用IPV6的相关配置项介绍

    这篇文章主要介绍了nginx使用IPV6的相关配置项介绍,首先查看编译参数是否编译了IPV6模块,然后介绍了监听IPV6的配置语法,需要的朋友可以参考下
    2014-07-07
  • nginx生成自签名SSL证书配置HTTPS的实现

    nginx生成自签名SSL证书配置HTTPS的实现

    本文主要介绍在Nginx中生成自签名SSL证书并配置HTTPS,包括安装Nginx、创建证书、配置证书以及测试访问,具有一定的参考价值,感兴趣的可以了解一下
    2025-03-03
  • nginx配置反向代理时遇到的路径问题

    nginx配置反向代理时遇到的路径问题

    这篇文章主要介绍了nginx配置反向代理时遇到的路径问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • nginx的安装以及简单配置教程

    nginx的安装以及简单配置教程

    这篇文章主要给大家介绍了关于nginx的安装以及简单配置的相关资料,以下是nginx在各种环境条件下的安装与配置过程,其中还分析了中间遇到的坑以及处理方式,需要的朋友可以参考下
    2023-08-08
  • 浅谈Nginx10m+高并发内核优化详解

    浅谈Nginx10m+高并发内核优化详解

    这篇文章主要介绍了浅谈Nginx10m+高并发内核优化详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • nginx的重定向(rewrite)问题及解读

    nginx的重定向(rewrite)问题及解读

    文章主要介绍了Nginx中的location匹配、优先级及其与rewrite的区别,详细解释了location和rewrite的使用场景、语法、优先级、标志位和执行顺序等内容,并通过示例展示了基于域名和IP地址进行跳转的方法
    2026-05-05
  • Nginx+Proxy_cache高速缓存配置

    Nginx+Proxy_cache高速缓存配置

    本文主要介绍了Nginx+Proxy_cache高速缓存配置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-01-01
  • Django+Nginx+uwsgi服务器部署

    Django+Nginx+uwsgi服务器部署

    这篇文章介绍了Django+Nginx+uwsgi服务器部署的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06

最新评论