使用 nginx 入口控制器記錄回應

使用 nginx 入口控制器記錄回應

出於監管目的,我嘗試記錄使用 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 有關,但是,它應該在內容階段運行,而日誌記錄應該在稍後的日誌記錄階段運行。

我可能在這裡遺漏了一些明顯的東西 - 但我想我已經嘗試了大多數組合。

相關內容