규제 목적으로 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과 관련이 있을 수 있다는 의심이 들지만, 이는 콘텐츠 단계에서 실행되어야 하는 반면 로깅은 이후 로깅 단계에 있어야 합니다.
아마도 여기에 분명한 것이 빠졌을 것입니다. 하지만 대부분의 조합을 시도한 것 같습니다.