使用 nginx ingress 控制器记录响应

使用 nginx ingress 控制器记录响应

出于监管目的,我尝试在使用 Kubernetes 的 nginx 入口控制器时记录整个响应。通过查看文档和此处的其他答案,我使用的是 body_filter_by_lua_block 指令。

我的配置图如下

apiVersion: v1
kind: ConfigMap
metadata:
 name: nginx-configuration
 namespace: ingress-nginx
 labels:
   app.kubernetes.io/name: ingress-nginx
   app.kubernetes.io/part-of: ingress-nginx
data:
 server-snippet: | 
   lua_need_request_body on;

   set $resp_body '';
   body_filter_by_lua_block {
       local resp_body = string.sub(ngx.arg[1], 1, 1000)
       ngx.ctx.buffered = (ngx.ctx.buffered or "") .. resp_body
       if ngx.arg[2] then
           ngx.var.resp_body = ngx.ctx.buffered
       end
   }
 log-format-upstream: |
   Response body: $resp_body

收到请求后,将记录以下内容:

Response body:

看起来 $resp_body 是空的。我怀疑这可能与 body_filter_by_lua_block 运行晚于日志记录有关,但它应该在内容阶段运行,而日志记录应该在较晚的日志记录阶段运行。

我可能在这里忽略了一些显而易见的东西 - 但我想我已经尝试了大多数组合。

相关内容