繁体   English   中英

基于 access_by_lua_block 中设置的 ngx.var 的动态 Nginx 上游

[英]Dynamic Nginx upstream based on ngx.var set in access_by_lua_block

简化的 NGINX 示例配置片段:

http {
  set $foo default;
  access_by_lua_block {
    ngx.var.foo = "bar"
  }

  server {
    listen 8080 default_server;
    server_name localhost;

    location / {
      set $proxy one;
      if ($foo = "bar") {
        set $proxy two;
      }
      proxy_pass http://$proxy;
    }
  }
}

我看到的问题是$foo似乎没有在 location 块中设置。 如果我添加一个在 http 下记录$foo的访问日志,则该值将为bar 如果我将访问日志放在 location 块中,那么它是default

如何根据access_by_lua_block中设置的ngx.var的值动态切换上游?

location 块中的 if 语句似乎在access_by_lua_block之前发生的 NGINX 阶段执行。 我想出的解决方法是将检查移入access_by_lua_block proxy_pass在内容阶段执行,可以读取访问阶段设置的变量。

http {
  set $proxy one;
  access_by_lua_block {
    ngx.var.foo = "bar"
    if ngx.var.foo == "bar" then
      ngx.var.proxy = "two"
    end
  }

  server {
    listen 8080 default_server;
    server_name localhost;

    location / {
      proxy_pass http://$proxy;
    }
  }
}

这是一个非常人为的例子,没有多大意义,但在真正的问题中,我不是简单地设置ngx.var.foo = "bar"而是根据收到的响应结果设置foo在访问块内发出的请求,因此它在本质上更具动态性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM