nginx lua设置代理标头

时间:2015-11-11 21:50:26

标签: nginx proxy lua

我相信这应该是一个简单的发现,但对于我的生活,我找不到答案。我正在尝试设置代理标头,我尝试了以下方法:

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

OR

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

设置代理标头的正确方法是什么。

谢谢 stabiuti

3 个答案:

答案 0 :(得分:1)

要设置或清除要发送到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。

答案 1 :(得分:0)

这不是正确的方法。你不需要使用lua来设置代理头。没有lua,你可以简单地做:

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

您可以在此处详细了解nginx代理模块:http://nginx.org/en/docs/http/ngx_http_proxy_module.html

答案 2 :(得分:0)

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