openResty 写日志失败header

openResty fails to write log header

我有以下配置将日志写入access.log

开始 Header 使用 LUA 和屏蔽

记录
    set $resp_header "";
    header_filter_by_lua_block {
        local rh = ngx.resp.get_headers()
        for k, v in pairs(rh) do
            ngx.var.resp_header = ngx.var.resp_header .. k.."="..v.." "
        end}

END Header 使用 LUA 和 Masking

记录

这对我的大多数上游响应都适用。但是对于发送重复 header 的同名“Set-Cookie”,两者的字符数都相当长。 nginx 错误日志说 .

[错误] 3142684#3142684:790582 未能 运行 header_filter_by_lua:header_filter_by_lua:11:尝试连接本地 'v'(一个 table 值)

我正在查看所有可能的 LUA 文档。任何帮助将不胜感激。

作为解决方法,我在 nginx 中强制设置了 header“Set-Cookie”。

#--- 对于 k, v 成对 (rh) 做 如果 k:lower() == ("set-cookie") 那么 v="已编辑" 结尾 #---

谢谢。

一些 headers 允许重复(Set-Cookie 是其中之一)并且将作为 table 由 get_headers() 函数返回,您的代码没有考虑(因此你得到的错误)。

ngx.var.resp_header .. k.."="..v.." " 替换为 ngx.var.resp_header .. k.."="..(type(v) == "table" and table.concat(v, ";") or v).." "