当前位置:首页 > 服务器技术 > 正文

Nginx日志文件分割(手把手教你自动切割Nginx访问日志与错误日志)

在运行 Nginx 的 Web 服务器时,随着时间推移,访问日志(access.log)和错误日志(error.log)会不断增长,可能占用大量磁盘空间,甚至影响系统性能。因此,定期对 Nginx 日志进行分割(也叫日志轮转)是运维中的基本操作。

本文将用最通俗易懂的方式,教小白如何使用 Linux 系统自带的 logrotate 工具自动分割 Nginx 日志文件,无需手动干预。

Nginx日志文件分割(手把手教你自动切割Nginx访问日志与错误日志) Nginx日志分割 日志轮转 logrotate配置 Nginx日志管理 第1张

为什么需要日志分割?

  • 防止日志文件过大,节省磁盘空间
  • 便于按日期归档和分析历史日志
  • 避免因单个日志文件过大导致读取缓慢
  • 提升服务器整体稳定性与可维护性

方法一:使用 logrotate(推荐)

logrotate 是 Linux 系统中专门用于日志轮转的工具,大多数发行版默认已安装。它支持按天、周、月或文件大小自动切割日志,并可压缩旧日志。

步骤 1:确认 logrotate 是否已安装

在终端执行:

logrotate --version

如果未安装,可使用以下命令安装(以 Ubuntu/Debian 为例):

sudo apt update && sudo apt install logrotate

步骤 2:创建 Nginx 的 logrotate 配置文件

通常,Nginx 的 logrotate 配置文件位于 /etc/logrotate.d/nginx。如果没有,我们可以手动创建:

sudo nano /etc/logrotate.d/nginx

在文件中写入以下内容(请根据你的实际日志路径调整):

/var/log/nginx/*.log {    daily    missingok    rotate 30    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 30:保留最近30个日志文件
  • compress:启用 gzip 压缩旧日志
  • delaycompress:延迟一天压缩(确保当天日志可读)
  • create 0640 www-data adm:创建新日志文件时设置权限和属主
  • postrotate ... endscript:通知 Nginx 重新打开日志文件(关键!)

步骤 3:测试配置是否生效

可以手动运行 logrotate 测试:

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

使用 -d 参数只会模拟运行,不会真正操作文件。若无报错,说明配置正确。

若想立即执行一次轮转(用于测试),可使用:

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

方法二:手动脚本分割(不推荐长期使用)

虽然可以用 shell 脚本 + cron 定时任务实现,但不如 logrotate 稳定可靠。这里仅作了解:

#!/bin/bashLOG_DIR="/var/log/nginx"DATE=$(date +%Y%m%d)mv $LOG_DIR/access.log $LOG_DIR/access.log.$DATEtouch $LOG_DIR/access.logchown www-data:adm $LOG_DIR/access.logkill -USR1 $(cat /var/run/nginx.pid)

然后通过 crontab -e 添加每日执行任务。但这种方式缺乏压缩、保留数量控制等高级功能,容易出错。

总结

使用 logrotate 是管理 Nginx日志分割 的最佳实践。它稳定、灵活、自动化程度高,是 Linux 运维的标准工具。掌握 logrotate配置Nginx日志管理 技能,能让你的服务器更高效、更安全。

提示:记得定期检查 /var/log/nginx/ 目录,确认日志是否按预期分割和压缩。