插件窝 干货文章 如何设置nginx日志的轮转周期

如何设置nginx日志的轮转周期

轮转 Nginx 日志 logrotate 964    来源:    2025-05-06

Nginx日志轮转设置指南

Nginx日志轮转是维护服务器的重要环节,可以有效管理磁盘空间并保留历史日志。以下是设置Nginx日志轮转的几种方法:

方法一:使用Linux的logrotate工具(推荐)

  1. 创建或编辑logrotate配置文件:

    sudo nano /etc/logrotate.d/nginx
    
  2. 添加以下内容(根据需求调整):

    /var/log/nginx/*.log {
       daily  # 每天轮转
       missingok
       rotate 14  # 保留14天的日志
       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
    }
    

    可选轮转周期:

    • daily - 每天
    • weekly - 每周
    • monthly - 每月
    • size 100M - 按大小(达到100MB时轮转)
  3. 测试配置是否正确:

    sudo logrotate -d /etc/logrotate.d/nginx
    
  4. 强制立即执行轮转测试:

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

方法二:手动配置Nginx日志切割

  1. 创建日志切割脚本 /usr/local/bin/rotate-nginx-logs.sh

    #!/bin/bash
    LOGS_PATH=/var/log/nginx
    DATE=$(date -d "yesterday" +"%Y-%m-%d")
    
    mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${DATE}.log
    mv ${LOGS_PATH}/error.log ${LOGS_PATH}/error_${DATE}.log
    
    kill -USR1 $(cat /var/run/nginx.pid)
    
  2. 添加执行权限:

    chmod +x /usr/local/bin/rotate-nginx-logs.sh
    
  3. 设置cron定时任务(每天午夜执行):

    sudo crontab -e
    

    添加:

    0 0 * * * /usr/local/bin/rotate-nginx-logs.sh
    

方法三:Nginx内置日志轮转(适用于1.19.8+版本)

在Nginx配置中使用time变量实现自动轮转:

http {
    access_log /var/log/nginx/access-$year$month$day.log;
}

注意事项

  1. 确保Nginx有权限写入日志目录
  2. 轮转后需要发送USR1信号通知Nginx重新打开日志文件
  3. 根据服务器负载和日志量选择合适的轮转周期
  4. 定期检查磁盘空间,确保日志不会占满磁盘

以上方法中,使用logrotate是最推荐的方式,因为它是Linux系统标准组件,功能完善且易于管理。