基于代理和访问标头重定向的 Nginx Lua 模块

基于代理和访问标头重定向的 Nginx Lua 模块

在 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。我如何才能访问此变量afterauth 并proxy_pass根据获取的标头进行重定向?

相关内容