Nginx日志轮转配置实战指南
前言
在 Ubuntu 系统上,Nginx 日志不断增大(access.log / error.log) 是一个非常常见的问题。 如果不加限制,日志可能会几百 GB,占满磁盘。
如何排查、限制、自动轮转、删除旧日志。
一、先确认日志路径和大小
默认情况下,Nginx 日志路径如下:
/var/log/nginx/access.log /var/log/nginx/error.log
查看大小:
sudo du -h /var/log/nginx/*.log

示例输出:
1.2G /var/log/nginx/access.log 500M /var/log/nginx/error.log
如果文件非常大(比如几 GB),说明日志没有被轮转。
二、检查 logrotate 是否启用
Ubuntu 系统自带 logrotate,默认会自动轮转 Nginx 日志。 配置文件在:
/etc/logrotate.d/nginx
查看内容:
cat /etc/logrotate.d/nginx
典型配置如下 👇
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 640 www-data adm
sharedscripts
postrotate
if [ -f /run/nginx.pid ]; then
kill -USR1 `cat /run/nginx.pid`
fi
endscript
}解释:
| 配置项 | 说明 |
| daily | 每天轮转一次 |
| rotate 14 | 保留 14 天的日志 |
| compress | 自动 gzip 压缩旧日志 |
| notifempty | 空文件不处理 |
| postrotate | 通知 Nginx 重新打开日志文件 |
三、手动测试日志轮转是否工作
运行:
sudo logrotate -f /etc/logrotate.d/nginx
执行后,你应该看到:
生成了
access.log.1或access.log.1.gz原始的
access.log重新创建,文件大小变小
查看结果:
ls -lh /var/log/nginx/
四、如果日志没有轮转(常见原因)
| 原因 | 解决方案 |
| /etc/logrotate.d/nginx 文件缺失 | 重新创建(见上面的示例) |
| Nginx PID 路径不同 | 修改 postrotate 里的路径,比如 /var/run/nginx.pid |
| 权限问题 | 确保 /var/log/nginx 属于 www-data:adm 或 root 可写 |
| logrotate 服务没启用 | 查看:systemctl status logrotate.timer |
启用定时器:
sudo systemctl enable --now logrotate.timer
五、清理旧日志(节省磁盘空间)
手动删除旧的压缩日志:
sudo find /var/log/nginx -name "*.gz" -type f -mtime +14 -delete
删除超过 14 天的日志归档。
或者彻底清空日志(危险操作前请确认):
sudo truncate -s 0 /var/log/nginx/access.log sudo truncate -s 0 /var/log/nginx/error.log
六、减少日志体积(优化写入)
如果访问量极大,可通过 Nginx 配置减少日志写入。
编辑:
sudo nano /etc/nginx/nginx.conf
找到:
access_log /var/log/nginx/access.log;
改为:
# 1️⃣ 禁止日志(不推荐生产) # access_log off; # 2️⃣ 或只记录错误级别高的日志 error_log /var/log/nginx/error.log warn;
重启 Nginx:
sudo systemctl reload nginx
七、推荐最终配置模板(放在/etc/logrotate.d/nginx)
/var/log/nginx/*.log { daily missingok rotate 14 compress delaycompress notifempty create 640 www-data adm sharedscripts postrotate [ -f /run/nginx.pid ] && kill -USR1 `cat /run/nginx.pid` endscript }八、总结
| 操作 | 命令 |
| 查看日志大小 | sudo du -h /var/log/nginx/*.log |
| 手动轮转 | sudo logrotate -f /etc/logrotate.d/nginx |
| 清空日志 | sudo truncate -s 0 /var/log/nginx/access.log |
| 删除旧日志 | sudo find /var/log/nginx -name "*.gz" -mtime +14 -delete |
| 启用自动轮转服务 | sudo systemctl enable --now logrotate.timer |
到此这篇关于Nginx日志轮转配置实战指南的文章就介绍到这了,更多相关Nginx日志轮转内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Apache和Nginx的优缺点详解_动力节点Java学院整理
Nginx和Apache一样,都是HTTP服务器软件,在功能实现上都采用模块化结构设计,都支持通用的语言接口。下面通过本文给大家分享Apache和Nginx比较 功能对比,感兴趣的朋友参考下吧2017-08-08
nginx从安装到配置详细说明(安装,安全配置,防盗链,动静分离,配置 HTTPS,性能优化)
这篇文章主要介绍了nginx从安装到配置详细说明(安装,安全配置,防盗链,动静分离,配置 HTTPS,性能优化,缓存,url重写),需要的朋友可以参考下2022-01-01
nginx常见内置变量$uri和$request_uri的使用
本文主要介绍了nginx常见内置变量$uri和$request_uri的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2024-07-07
详解使用Nginx和uWSGI配置Python的web项目的方法
这篇文章主要介绍了使用Nginx和uWSGI配置Python的web项目的方法,与其他CGI连接方式相比uwsgi的连接性能也较为出众,需要的朋友可以参考下2015-12-12


最新评论