使用nginx lua设置代理头信息

我相信这应该是一个简单的发现,但是我现在却无法找到答案。我正在尝试设置代理头,我已经尝试了以下这些方法:

location / {
        access_by_lua '
            ngx.header["ZZZZ"] = zzzzz
            proxy_pass http://127.0.0.1:8888;
        ';

或者

location / {
        access_by_lua '
            ngx.proxy_set_header["ZZZZ"] = zzzzz
            proxy_pass http://127.0.0.1:8888;
        ';

请问设置代理头的正确方法是什么?

谢谢。

点赞
用户3300806
用户3300806

这不是正确的方法。您不需要使用 lua 来设置代理头。没有 lua,您可以简单地执行以下操作:

location / {
    proxy_set_header ZZZZ zzzzz;
    proxy_pass http://127.0.0.1:8888;
}

您可以在这里阅读更多关于 nginx proxy 模块的信息:http://nginx.org/en/docs/http/ngx_http_proxy_module.html

2016-01-26 03:48:11
用户12767390
用户12767390
server{
    location /v1 {
        if ($request_method != 'OPTIONS' ) {
            header_filter_by_lua_block{
                local allowed = {["cache-control"]= true,["content-language"]=true,["content-type"]=true,["expires"]=true};
                for key,value in pairs (ngx.resp.get_headers()) do
                    if (allowed[string.lower(key)]==nil) then
                        ngx.header[key]="";
                    end
                end
            }
        }
    }
    proxy_pass https://smth:8080;
}

这是一个示例,用于更改发送给客户端的头部信息。

注意,ngx.header 不是一个普通的 Lua 表,因此不能使用 Lua 的 ipairs 函数对其进行迭代。

注意:如果 HEADER 或 VALUE 包含 \r 或 \n 字符,则它们将被截断。截断后的值将包含直到第一个 \r 或 \n 前的所有字符。

对于读取请求头部,使用 ngx.req.get_headers 函数代替。 ( https://github.com/openresty/lua-nginx-module#ngxheaderheader)

2020-01-23 09:00:44
用户5984266
用户5984266

设置或清除将发送到 proxy_pass 的标头,可以使用以下方法:

要设置标头,请使用

ngx.req.set_header(header_name, value)

要清除标头,请使用

ngx.req.clear_header(header)

要清除所有标头,可以编写

for header, _ in pairs(ngx.req.get_headers()) do
    ngx.req.clear_header(header)
end

现在回答您的问题,您可以使用

location / {
        access_by_lua_block {
            ngx.req.set_header("ZZZZ", zzzzz)
        }
        proxy_pass http://127.0.0.1:8888;
}

请确保将其编写在 access_by_lua 或 rewrite_by_lua 中。

2020-03-02 17:37:41