在将access_by_lua和ngx.exec与一个(命名的)位置组合时避免重定向循环

我想以一种可以完全'掩盖'配置的方式更改现有的nginx配置,并在某些cookie可用时将所有内容代理到上游(以隐藏某个服务器)。

这不仅包括一些'位置'指令,而且基本上包括每个位置指令(与设置或映射变量并更新n位置的try_files等相对)。

我的基本思路是使用lua并像这样跳转到重写/访问阶段:

access_by_lua_block {
    # 如果未检测到我们的cookie,请按照通常方式进行
    if ngx.var.cookie_demo != nil and string.len (ngx.var.cookie_demo)!= 32 then
        return
    end
    # 代理和返回w / o进一步处理
    ngx.exec("@ngxbackend"return ngx.exit(ngx.HTTP_OK)
}

#代理上游
location @ ngxbackend {
    包括/ etc / nginx / proxy_params_demo;
    代理通过https://demo-upstreams传递;
}

但是,这会导致一个ERR,其中包含**rewrite或内部重定向循环,重定向到命名位置' @ ngxbackend' **,因为由于访问_ by_lua_block,命名位置可能永远不会到达其内部重定向。

我能否通过使用变量和进一步的条件检查来解决这个问题?

点赞