出于监管目的,我尝试在使用 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 运行晚于日志记录有关,但它应该在内容阶段运行,而日志记录应该在较晚的日志记录阶段运行。
我可能在这里忽略了一些显而易见的东西 - 但我想我已经尝试了大多数组合。