openResty无法写日志头

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

开始使用带有遮罩的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}

结束使用带有遮罩的LUA进行头部日志记录

这对于大多数上游响应都很好,但对于发送相同名称"Set-Cookie"的重复头的一个而言,长度都相当长。nginx错误日志如下:

[error] 3142684#3142684: 790582 failed to run header_filter_by_lua: header_filter_by_lua:11: attempt to concatenate local 'v' (a table value)

我正在查阅所有可能的LUA文档。感谢任何帮助。

作为一种解决方法,我已经强制在nginx中设置了头部"Set-Cookie"。

#--- for k, v in pairs(rh) do if k:lower() == ("set-cookie") then v="过滤" end #---

谢谢。

原文链接 https://stackoverflow.com/questions/69163969

点赞
stackoverflow用户1442917
stackoverflow用户1442917

部分标题是允许重复的(Set-Cookie是其中之一),并且将由 get_headers() 函数返回为表格,但是你的代码没有考虑到这一点(因此你得到了错误)。

ngx.var.resp_header..k.."="..v.." " 替换为类似于 ngx.var.resp_header..k.."="..(type(v) == "table" and table.concat(v, ";") or v).." " 的内容。

2021-09-13 19:12:48