Nginx不记录指定日志的方法
发布于 分类 Nginx
更新于 2017-04-01
20天前 有1个用户阅读过
一般情况下,网站的日志有利于统计分析,比如对网站排错,网站漏洞入侵分析,也或者是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才行。关于它们的区别可以查看尾部的参考资料。
-- The End --