如何将lua变量返回到nginx变量中

时间:2018-01-26 12:22:36

标签: nginx lua openresty

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

nginx包含access_by_lua中的lua脚本* 它将var设置为:

ngx.var.blocked = '1'

和路线在这样的位置:

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

现在的问题是nginx没有获取变量(在此阶段)。 如果我在set_by_lua *阶段包含lua脚本,那么变量传递可以工作,但是我没有在这个阶段访问共同套接字。

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

2 个答案:

答案 0 :(得分:1)

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)工作。

答案 1 :(得分:0)

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