如何将 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)。
我有一个 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)。