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