【问题标题】:openResty fails to write log headeropenResty 写日志头失败
【发布时间】:2021-11-08 19:44:10
【问题描述】:

我有以下配置将日志写入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 END Header 日志记录

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

[error] 3142684#3142684:790582 未能运行 header_filter_by_lua:header_filter_by_lua:11:尝试连接本地 'v'(表值)

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

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

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

谢谢。

【问题讨论】:

    标签: nginx lua nginx-reverse-proxy openresty


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢保罗。它工作完美。能否请您提供包含这些信息的文档或博客。
    • 这是在get_headers() documentation中捕获的;请参阅以“对于请求标头的多个实例,例如:...”开头的段落
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2021-04-02
    • 2021-09-07
    • 2015-02-15
    • 2023-04-04
    • 2023-02-25
    • 1970-01-01
    相关资源
    最近更新 更多