如何将 lua 变量取回 nginx 变量

How to get lua variables back into nginx variables

我有一个 lua 脚本,它使用 lua-resty 通过 co-sockets 调用另一个服务。 现在我想使用这个调用的信息在 nginx 中路由请求。

nginx 在 access_by_lua 中包含 lua 脚本* 像这样设置 var:

ngx.var.blocked = '1'

和路线如下:

if ( $blocked ) {
     proxy_pass   http://haproxy-9001;
     break;
}

现在的问题是 nginx 没有获取变量变化(在这个阶段)。 如果我在 set_by_lua* 阶段包含 lua 脚本,那么变量传递有效,但我无法在此阶段访问共同插座。

知道如何在 access_by_lua、rewrite_by_lua 或 content_by_lua 阶段将变量从 lua 移入 nginx 变量,以便我可以使用co-socket api 进行 http 调用?

也许你可以用那个代理而不是变量来捕获位置,它在 access_by_lua 范围内工作 https://github.com/openresty/lua-nginx-module#ngxlocationcapture

if nginx指令由https://nginx.ru/en/docs/http/ngx_http_rewrite_module.html实现。

显然它适用于重写阶段,因此您在访问阶段的更改不起作用。 只是不要使用if。下面是我的一个 nginx 配置的片段:

proxy_pass $scheme://$upstream$uri$is_args$args;

只需在访问阶段设置 $upstream 变量,它将在内容阶段工作 (proxy_pass)。