我发现能够根据 url 参数更改上游非常方便(主要用于测试):
upstream balance {
server 111.111.111.111 weigth=5;
server 222.222.222.222 weigth=6;
}
upstream server1 {
server 111.111.111.111;
}
upstream server2 {
server 222.222.222.222;
}
server {
server_name myserver.servers.com;
set $upstream balance;
if ($arg_server = "server1") {
set $upstream server1;
}
if ($arg_server = "server2") {
set $upstream server2;
}
location / {
proxy_pass http://$upstream/VirtualHostBase/https/$host:80/VirtualHostRoot$request_uri;
proxy_next_upstream http_500 http_502;
}
listen: 80;
}
上游交换机可以工作,但是在这个配置中,指令proxy_next_upstream
不起作用,因为$upstream
变量存在proxy_pass
(因为 nginx 只能在请求时确定上游服务器,而 proxy_next_upstream 是在服务器启动或重新加载时确定的,如果我的理解是正确的)。
有没有办法使用此 url 参数并仍使 proxy_next_upstream 正常工作?我知道我可以使用子域代替 url 参数,但这是我想避免的事情。