nginx不记录特定日志(access_log_bypass_if)

凉白开 Nginx934,8722字数 1071阅读3分34秒阅读模式

apache可以使用CustomLog [env=XXX]指定排除哪些日志不记录,nginx自身没有这个功能,但是在官方的第三方模块找到了ngx_log_if_module,它实现了类似env的功能.如果你想了解nginx更多nginx日志格式的资料,请参考咱们ttlsa《nginx日志配置

1. nginx第三方模块安装文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-modules-access_log_bypass_if/

参考运维生存时间之前的文章《如何安装nginx第三方模块文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-modules-access_log_bypass_if/

2. 指令
语法: access_log_bypass_if (condition) [and]
默认值: -
Scope: main/srv/loc文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-modules-access_log_bypass_if/

"access_log_bypass_if" 定义的规则如果为真,那么相应的日志不会写入access log中. access_log_bypass_if你可以把它当做if来看待,access_log_bypass_if可以使用and逻辑运算.如果当前if有and,那么他和下一个if共同作用.文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-modules-access_log_bypass_if/

 文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-modules-access_log_bypass_if/

3. access_log_bypass_if配置文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-modules-access_log_bypass_if/

如下是多个表达式的例子文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-modules-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)的请求都不会记录到访问日志中.文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-modules-access_log_bypass_if/

当然,access_log_bypass_if会在多个地方出现,官方文档叫父配置块和子配置块,默认情况下子配置块会覆盖父配置块,并且不会继承父配置块的配置.
如下例子文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-modules-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覆盖了文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-modules-access_log_bypass_if/

4. 参考地址文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-modules-access_log_bypass_if/

官方地址:https://github.com/cfsego/ngx_log_if/文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-modules-access_log_bypass_if/

 文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-modules-access_log_bypass_if/

站点:运维生存时间   网址:https://www.ttlsa.com/html/3887.html文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-modules-access_log_bypass_if/ 文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-modules-access_log_bypass_if/

weinxin
我的微信
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
凉白开
  • 本文由 发表于 05/12/2013 16:43:51
  • 转载请务必保留本文链接:https://www.ttlsa.com/nginx/nginx-modules-access_log_bypass_if/
评论  9  访客  6
    • owen
      owen 0

      编译成功了,但运行出现这个错误 nginx: [emerg] unknown directive “access_log_bypass_if” ,不知道为什么

        • 匿名
          匿名 9

          @ owen 这个模块没有加进去ngx_log_if_module

        • 码农and公子
          码农and公子 9

          我不想记录所有HEAD的请求,这个怎么写,还有别的方法吗

          • 淘宝卫霍
            淘宝卫霍 9

            不错

            • as
              as 9

              我自己测试的1.4.4版本加了access_log_bypass_if,全部都会by_pass了一条都记录不下来

            评论已关闭!