Nginx不记录指定日志的方法

发布于 2016-09-08 作者 [重庆SEO]

更新于 2017-04-01

一般情况下,网站的日志有利于统计分析,比如对网站排错,网站漏洞入侵分析,也或者是SEO统计等等。但是如果网站访问量过大,日志会占用比较大的空间。

解决日志占用,据我所知的通用方法有:

1. 将比较老的日志进行异地备份,或者跳过备份,直接删除它。

2. 也许还有的是直接压缩旧的日志,因为压缩后,日志文件会很小, 压缩后大概只有原来的1/10左右!demo:

zip ./test.zip ./access_20160907.log
adding: access_20160907.log (deflated 89%)
除此之外,我有个新的需求,我想要我当前的nginx不记录特定的日志,比如/ajax/,/static/目录和css,js文件。

apache可以使用CustomLog [env=XXX]指定排除哪些日志不记录,Nginx也是可以实现滴!我的现有nginx实现的经验方法有2种:

1. 使用access_log off

location ~ .*\.(js|css)$
{
access_log off;
}
location ~ (static|upload)
{
access_log off;
}

2.使用第三方模块ngx_log_if_module

github项目地址 https://github.com/cfsego/ngx_log_if/

server {
access_log_bypass_if ($status = 400);
access_log_bypass_if ($host ~* 'nolog.com');
access_log_bypass_if ($uri = 'status.nginx') and;
access_log_bypass_if ($status = 200);
}

上面一个简单的demo,详情请查看项目介绍。

我的实际应用demo

access_log_bypass_if ($uri ~* '/(static|ajax|upload)/');

2017-04-01 补充:

后来我发现我的demo中有点bug,比如static,ajax,upload,其中ajax是伪静态后的地址,并不真实存在,所以日志中还是有ajax的日志,static,upload正常,把$url换成$request_uri才行。关于它们的区别可以查看尾部的参考资料。