免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1479 | 回复: 0
打印 上一主题 下一主题

[服务应用] nginx不记录特定日志(access_log_bypass_if) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-12-06 18:15 |只看该作者 |倒序浏览
apache可以使用CustomLog [env=XXX]指定排除哪些日志不记录,nginx自身没有这个功能,但是在官方的第三方模块找到了ngx_log_if_module,它实现了类似env的功能.如果你想了解nginx更多nginx日志格式的资料,请参考咱们ttlsa《nginx日志配置》

1. nginx第三方模块安装

参考运维生存时间之前的文章《如何安装nginx第三方模块》

2. 指令
语法: access_log_bypass_if (condition) [and]
默认值: -
Scope: main/srv/loc

"access_log_bypass_if" 定义的规则如果为真,那么相应的日志不会写入access log中. access_log_bypass_if你可以把它当做if来看待,access_log_bypass_if可以使用and逻辑运算.如果当前if有and,那么他和下一个if共同作用.



3. access_log_bypass_if配置

如下是多个表达式的例子

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

上面一共有4个表达式,前面两条分别独立,组后两条是and组合的。也就是说状态为400或者host为ttlsa.com或者(uri是status.nginx并且响应状态为200)的请求都不会记录到访问日志中.

当然,access_log_bypass_if会在多个地方出现,官方文档叫父配置块和子配置块,默认情况下子配置块会覆盖父配置块,并且不会继承父配置块的配置.
如下例子

server {
access_log_bypass_if ($status = 400);
location / {
access_log_bypass_if ($host ~* 'ttlsa.com');
}
}

我们可以发现$status = 400根本就没有效果,因为他被location /里面的access_log_bypass_if覆盖了

4. 参考地址

官方地址:https://github.com/cfsego/ngx_log_if/



站点:运维生存时间   网址:http://www.ttlsa.com/html/3887.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP