Aus regulatorischen Gründen versuche ich, die gesamte Antwort zu protokollieren, wenn ich den Nginx-Ingress-Controller für Kubernetes verwende. Aus der Dokumentation und anderen Antworten hier geht hervor, dass ich die Direktive body_filter_by_lua_block verwende.
Meine Configmap zum Einrichten sieht so aus
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
Beim Empfang einer Anfrage wird Folgendes protokolliert:
Response body:
Es scheint, dass $resp_body leer ist. Ich habe den Verdacht, dass dies damit zusammenhängen könnte, dass body_filter_by_lua_block später als die Protokollierung ausgeführt wird. Es sollte jedoch in der Inhaltsphase ausgeführt werden, während die Protokollierung in der späteren Protokollierungsphase erfolgen sollte.
Wahrscheinlich übersehe ich hier etwas Offensichtliches, aber ich glaube, ich habe die meisten Kombinationen ausprobiert.