如何将Lua变量传到Nginx变量中

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

nginx在access_by_lua中包含lua脚本 并设置变量如下:

ngx.var.blocked = '1'

并且在location中路由如下:

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

问题是nginx在这个阶段不能接收到变量的更改。 如果我在set_by_lua*阶段包含lua脚本,则变量传递可以正常工作,但是在该阶段我无法访问co-sockets。

有什么办法可以将变量从Lua传到access_by_lua、rewrite_by_lua或content_by_lua阶段的Nginx变量中,使我可以使用co-socket API去做一个http调用吗?

点赞
用户9277861
用户9277861

也许您可以使用代理捕获位置,而不是变量,在 access_by_lua 范围内运行。 https://github.com/openresty/lua-nginx-module#ngxlocationcapture

2018-01-27 22:37:38
用户2060502
用户2060502

如果 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)起作用。

2018-01-29 14:26:28