我有一个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调用吗?
答案 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