插件窝 干货文章 如何实现Nginx的日志切割配置

如何实现Nginx的日志切割配置

Nginx 日志 logrotate 文件 451    来源:    2025-04-10

Nginx日志切割配置指南

Nginx本身不提供内置的日志切割功能,但可以通过以下几种方式实现日志切割:

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

logrotate是Linux系统自带的日志管理工具,配置简单可靠。

  1. 创建logrotate配置文件(通常位于/etc/logrotate.d/nginx
/var/log/nginx/*.log {
    daily
    missingok
    rotate 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:每天轮转 - missingok:如果日志文件不存在也不报错 - rotate 14:保留14个旧日志文件 - compress:压缩旧日志 - delaycompress:延迟压缩前一个日志文件 - notifempty:空日志文件不轮转 - create 0640 www-data adm:创建新日志文件的权限和所有者 - sharedscripts:所有日志处理完再执行脚本 - postrotate:轮转后执行的命令(通知Nginx重新打开日志文件)

  1. 测试配置是否正确
logrotate -d /etc/logrotate.d/nginx  # 测试模式
logrotate -f /etc/logrotate.d/nginx  # 强制执行

方法二:使用cron定时任务手动切割

  1. 创建切割脚本/usr/local/bin/nginx_logrotate.sh
#!/bin/bash
# 定义日志目录和文件名
LOGS_PATH=/var/log/nginx
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)

# 切割access.log和error.log
for LOGNAME in access error
do
    mv ${LOGS_PATH}/${LOGNAME}.log ${LOGS_PATH}/${LOGNAME}_${YESTERDAY}.log
done

# 通知Nginx重新打开日志文件
kill -USR1 $(cat /var/run/nginx.pid)

# 可选:压缩旧日志
find ${LOGS_PATH} -name "*.log" -mtime +7 | xargs gzip
  1. 给脚本执行权限
chmod +x /usr/local/bin/nginx_logrotate.sh
  1. 添加cron定时任务
crontab -e

添加以下内容(每天0点执行):

0 0 * * * /usr/local/bin/nginx_logrotate.sh

方法三:使用Nginx的timeiso8601变量(需要编译支持)

  1. 在nginx.conf中配置日志格式:
http {
    log_format timed_combined '$remote_addr - $remote_user [$time_iso8601] '
                             '"$request" $status $body_bytes_sent '
                             '"$http_referer" "$http_user_agent"';

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

注意:这种方法需要Nginx编译时添加--with-http_geoip_module--with-stream_geoip_module模块支持。

注意事项

  1. 切割后需要通知Nginx重新打开日志文件,使用命令:
kill -USR1 $(cat /var/run/nginx.pid)
  1. 对于大流量网站,建议使用logrotate的dateext选项按日期命名日志文件

  2. 确保Nginx进程用户对日志目录有写权限

  3. 定期清理旧日志,避免磁盘空间不足

  4. 在生产环境推荐使用logrotate方案,它是系统级的标准解决方案,稳定性有保障