nginx

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > nginx > Nginx日志轮转

Nginx日志轮转配置实战指南

作者:自由会客室

在Nginx服务器上,日志文件记录了服务器的访问日志、错误日志等重要信息,随着时间的推移,日志文件会越来越大,占用服务器的存储空间,这篇文章主要介绍了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

执行后,你应该看到:

查看结果:

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日志轮转内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文