【问题标题】:How to get lua variables back into nginx variables如何将 lua 变量返回到 nginx 变量中
【发布时间】:2018-01-29 22:26:28
【问题描述】:

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

【问题讨论】:

    标签: nginx lua openresty


    【解决方案1】:

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

    显然它适用于重写阶段,因此您在访问阶段的更改不起作用。 只是不要使用如果。下面是来自我的 nginx 配置之一的 sn-p:

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

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

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2022-08-19
      • 2011-09-11
      • 2021-02-04
      • 2018-07-22
      • 2016-08-24
      • 2021-03-10
      • 2021-11-07
      • 1970-01-01
      • 2021-12-28
      相关资源
      最近更新 更多