openresty通过header_filter_by_lua记录特定的请求头和特定的响应头到日志文件
有时我们希望记录特定的请求头信息和特定的响应头信息,以便能够通过关联请求信息和响应头信息,来实现记录请求和响应的对应关系。这里通过逐步尝试和优化的方式进行尝试。具体包括将需要的请求头和响应头组织到一条日志记录,输出到单独的错误日志文件记录等的配置尝试。
1. 配置转发和日志记录
首先配置记录所有的请求头和响应头信息,记录到error_log指定的文件中。
error_log logs/error.log info;
log_format main '$remote_addr [$request_id] - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
location /ngtest {
proxy_pass http://127.0.0.1:8060;
header_filter_by_lua '
local reqheaders = ngx.req.get_headers()
for key, val in pairs(reqheaders) do
ngx.log(ngx.INFO, "request:", key, " : ", val)
end
-- 获取所有响应头
local headers = ngx.resp.get_headers()
-- 打印所有响应头
for key, val in pairs(headers) do
ngx.log(ngx.INFO, "response:", key, " : ", val)
end
';
}
这里的配置是将请求到本地的 http://127.0.0.1:8060 地址,并且记录请求头和响应头到日志文件,日志级别为INFO。
3. postman
通过postman发送http请求。
2. 日志记录
2024/10/16 15:59:59 [info] 139655#139655: *530 [lua] header_filter_by_lua(nginx.conf:69):4: request:authorization : NTLM TlRMTVNTUAADAAAAGAAYAEAAAADCAMIAWAAAAAAAAAAAAAAAHAAcABoBAAAWABYANgEAAAAAAAAAAAAABYIIAJi+0X/kdkl/ONUQGF7iAm1ii5/nECrNEufop988HOhSTFsJVFvxdXYBAQAAAAAAAKAG+Vfn19oBYouf5xAqzRIAAAAAAgAGAE8AVABQAAEAHgBXAEkATgAtAEkAUgBEAFMAVgBKAE8AMwBVAFQAVAAEAA4AbwB0AHAALgBjAG8AbQADAC4AVwBJAE4ALQBJAFIARABTAFYASgBPADMAVQBUAFQALgBvAHQAcAAuAGMAbwBtAAUADgBvAHQAcAAuAGMAbwBtAAcACAD4****** while reading response header from upstream, client: 111.206.85.18, server: localhost, request: "GET /ngtest HTTP/1.1", upstr