帮助中心 >
  关于云服务器 >
  Nginx云服务器怎么实现访问日志分割
Nginx云服务器怎么实现访问日志分割
时间 : 2025-03-20 15:26:30
编辑 : Jtti

  在云服务器中,Nginx 的访问日志默认会写入一个统一的日志文件,如 /var/log/nginx/access.log,但如果网站流量较大,日志文件会迅速增长,不利于管理和分析。因此,定期分割(按天、按小时等)存储日志是常见的优化手段。以下是几种实现 Nginx 访问日志分割的方法:

  方法1、推荐使用logrotate自动分割日志

  logrotate是Linux内置的日志管理工具,可定期自动归档、压缩和删除旧日志。

  配置 logrotate

  在 /etc/logrotate.d/nginx 中添加或修改如下内容:

/var/log/nginx/access.log {
    daily                  # 按天分割(可选 hourly、weekly、monthly)
    rotate 7               # 保留 7 天的日志
    missingok              # 忽略不存在的日志文件
    notifempty             # 空文件不处理
    compress               # 采用 gzip 压缩日志
    delaycompress          # 延迟一天再压缩,防止日志仍在写入时被压缩
    postrotate
        systemctl reload nginx > /dev/null 2>&1  # 重新加载 Nginx,使其使用新的日志文件
    endscript
}

  手动测试 logrotate

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

  方法2:手动shell脚本定时分割

  适用于需要自定义日志格式或定制管理的场景。

  创建日志分割脚本

  新建脚本 /usr/local/bin/nginx_log_split.sh:

#!/bin/bash

# 定义日志存放目录
LOG_DIR="/var/log/nginx"
DATE=$(date +%Y-%m-%d)

# 备份当前日志
mv $LOG_DIR/access.log $LOG_DIR/access-$DATE.log

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

  kill -USR1 $(cat /run/nginx.pid) 让 Nginx 重新打开日志文件,而不会中断服务。

  赋予执行权限

 chmod +x /usr/local/bin/nginx_log_split.sh

  配置 crontab 定时执行

  编辑 crontab:

 crontab -e

  添加:

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

  表示每天午夜 00:00 运行日志分割。

  方法3:Nginx 按天自动分割日志(基于变量)

  如果希望直接在 Nginx 中按日期分割日志,可以使用 $time_local 变量。

  修改 Nginx 配置

  打开 /etc/nginx/nginx.conf 或站点配置文件:

 access_log /var/log/nginx/access-$time_iso8601.log;

  然而,Nginx 默认不支持动态日志文件路径,因此该方法仅适用于 OpenResty 或特殊编译的 Nginx 版本。

JTTI-Defl
JTTI-COCO
JTTI-Selina
JTTI-Ellis
JTTI-Eom