Nginx 日志切割
Nginx 默认不会自动切割日志文件,长期运行会导致日志文件过大,影响性能和可管理性。以下是几种常用的 Nginx 日志切割方法:
方法一:使用 logrotate(推荐)
logrotate 是 Linux 系统自带的日志管理工具,可以方便地实现日志切割、压缩和删除。
1. 创建 logrotate 配置文件
在 /etc/logrotate.d/ 目录下创建 nginx 文件:
sudo nano /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: 使用gzip压缩旧日志delaycompress: 延迟压缩前一个日志文件(与compress配合使用)notifempty: 如果日志为空,则不进行切割create 0640 www-data adm: 创建新日志文件并设置权限和所有者sharedscripts: 在所有日志文件处理后执行一次postrotate脚本postrotate: 切割后通知Nginx重新打开日志文件
2. 测试配置
sudo logrotate -d /etc/logrotate.d/nginx # 测试配置
sudo logrotate -f /etc/logrotate.d/nginx # 强制执行切割
方法二:使用 cron 定时任务 + mv 命令
如果不想使用 logrotate,可以手动创建脚本:
1. 创建切割脚本
sudo nano /usr/local/bin/nginx_logrotate.sh
添加以下内容:

#!/bin/bash
LOG_PATH=/var/log/nginx
DATE=$(date +%Y%m%d)
# 切割访问日志
mv ${LOG_PATH}/access.log ${LOG_PATH}/access_${DATE}.log
# 切割错误日志
mv ${LOG_PATH}/error.log ${LOG_PATH}/error_${DATE}.log
# 通知Nginx重新打开日志文件
kill -USR1 $(cat /var/run/nginx.pid)
2. 设置可执行权限
sudo chmod +x /usr/local/bin/nginx_logrotate.sh
3. 添加定时任务
sudo crontab -e
添加以下内容(每天午夜执行):

0 0 * * * /usr/local/bin/nginx_logrotate.sh
方法三:使用 Nginx 模块
Nginx 有一个商业版模块 ngx_http_log_rotate_module 可以实现日志切割,但大多数情况下使用上述方法更为常见。
注意事项
- 权限问题:确保 Nginx 进程有权限写入新创建的日志文件
- 磁盘空间:定期检查日志文件是否被正确切割和删除
- 日志分析:如果使用日志分析工具,确保切割后工具能识别新日志文件
- 多实例:如果运行多个 Nginx 实例,需要为每个实例单独配置日志切割
日志文件命名建议
推荐的日志文件命名格式:
access_YYYYMMDD.logerror_YYYYMMDD.log
这样可以方便按日期排序和查找特定日期的日志。
通过以上方法,您可以有效地管理 Nginx 日志文件,避免单个日志文件过大带来的问题。
- 随机文章
- 热门文章
- 热评文章
- 深入探讨网页性能测试工具:提升网站性能与用户体验的利器网页性能测试工具怎么用
- 探索高智商世界:门萨入会测试与智商的奥秘门萨俱乐部入门智商评估测试题
- 【Docker游戏】使用Docker部署vue-XiuXianGame文字修仙小游戏
- 解密数据库的MPP模式
- 2025-04-13:范围内整数的最大得分。用go语言,给定一个整数数组 start 和一个整数 d,这代表了 n 个区间 [s
- Java 定时任务系统
- 性格测试 测你的性格像《小娘惹》中的谁
- Java 服务网格:Istio 在微服务中的应用与挑战
- 准到吓人的心理测试题
回归分析



