nginx从包含特定值的access_log中删除POST

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx从包含特定值的access_log中删除POST相关的知识,希望对你有一定的参考价值。

如何从access_logs中删除包含敏感信息的某些行。该信息通过POST提供,并在$ request_body中发送

以下方式失败:

1>

log_format filter             '[$time_iso8601] $remote_addr "$request" $status $body_bytes_sent $upstream_response_time "$http_referer" "$http_user_agent" $request_body';

      set $temp $request;
      if ($temp ~* '{\x22username\x22:\x22*.*\x22,\x22password\x22:\*.*\x22}') {
          set $temp $1password:****$2;
      }

      access_log /var/log/nginx/access_kibana.log filter if=$request;
      proxy_pass http://kibana;

结果:没有任何反应,敏感数据仍在access_log中

2>

   set $sensitive $request;
      if ($sensitive ~ ("password")) {
           set $sensitive $1test:test$2;
      }
      access_log /var/log/nginx/access_kibana.log filter if=$request;
      proxy_pass http://kibana;

这种传统的方法可能在过去工作,但在我的情况下却没有

3>作品。但完全删除所有$ request_body日志..

if ($sensitive ~ ("password")) {
           set $loggable 0;
      }

有没有人有解决这个问题的文件/经验?希望能够接受这个教育。提前谢谢你

答案

在你们提出专业建议之前,我会分享决议。

访问日志中的日志条目如下所示:

2018-02-27T06:56:10-08:00] 10.10.10.10 - "POST /api/security/v1/login HTTP/1.1" 200 0 0.012 "http://10.10.10.10/login" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:57.0) Gecko/20100101 Firefox/57.0" {x22usernamex22:x22userx22,x22}

为了从访问日志中仅删除此条目,我们必须搜索包含api安全登录和版本的POST条目,并在位置配置中进行设置。

 if ($request ~ "POST /api/security/v1/login HTTP/{1,9}.{1,9}") {
    set $loggable 0;
  }

无论如何,谢谢你的帮助

以上是关于nginx从包含特定值的access_log中删除POST的主要内容,如果未能解决你的问题,请参考以下文章

如何使用熊猫从另一个数据框 B 的列中删除包含特定数量值的数据框 A 中的行?

从 XML 中删除具有特定值的节点

使用 TypeScript 从数组中删除具有特定 id 字段值的对象的聪明方法是啥? [复制]

使用正则表达式从字符串中删除属性值不是特定值的所有 xml 节点

删除特定行中具有特定值的所有列

如何从对象数组中获取具有属性的列表,除非它包含具有特定值的另一个项目?