在 nginx 中,我想根据访问和代理标头重定向用户。当我将其放入响应标头时,它们会在浏览器中正确显示。但在 lua 中使用时重定向却if
不行。
对于具有访问权限的用户,应用程序会创建字符串isprotectedfalse
,对于来宾,我得到isprotected
add_header X-User-Access-Flag $userinfo$arg_limit$upstream_http_x_doc_protection; #this works
if ($http_x_user_access_flag = "isprotected") { #this doesnt
return 302 $scheme://$http_host$uri?limit=true;
}
和类似的代码,但是在lua中:
rewrite_by_lua_block {
local params = ngx.req.get_uri_args()
local limit = params["limit"]
local headers = ngx.resp.get_headers()
local useraccesss = headers["X-User-Access-Flag"]
if useraccesss == "isprotected" and limit == nil then
local delimiter = (ngx.var.is_args == "" or ngx.var.is_args == nil) and "?" or "&"
local new_url = ngx.var.request_uri .. delimiter .. "limit=true"
return ngx.redirect(new_url)
end
}
为什么它没有按预期重定向?
编辑:从使用header_filter_by_lua_block
我设法从ngx.var['upstream_http_x_user_access_flag']
lua 块之前用来设置 X-User-Access-Flag(来自 proxy_pass)的地址访问它们。但遗憾的是,重定向尝试时服务器出错。此时似乎已发送标头(但我仍能在那里设置自定义标头?!这很令人困惑。
我无法访问此类,ngx.var
因为rewrite_by_lua_block
这尚未执行proxy_pass
。我如何才能访问此变量after
auth 并proxy_pass
根据获取的标头进行重定向?