[英]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.