nginx负载平衡器/位置难题

nginx负载平衡器/位置难题,nginx,load-balancing,Nginx,Load Balancing,我想将nginx设置为负载平衡器。但我想将其设置为某些请求(带有特定参数)只会发送到某些主机。基本上,这个想法是在原始请求中使用任何主机,然后如果用户指定某些参数,例如bla0,则将请求重定向到主机0,而bla1重定向到主机1。下面是我提出的配置: # load balancing server server { listen 8000; server_name example.com www.example.com; # requests to bla0 server

我想将nginx设置为负载平衡器。但我想将其设置为某些请求(带有特定参数)只会发送到某些主机。基本上,这个想法是在原始请求中使用任何主机,然后如果用户指定某些参数,例如bla0,则将请求重定向到主机0,而bla1重定向到主机1。下面是我提出的配置:

# load balancing server
server {
    listen 8000;
    server_name example.com www.example.com;

    # requests to bla0 server
    location ~ ^(/request).*bla0$ {
        proxy_pass  http://localhost:8081;
    }

    # requests to bla1 server
    location ~ ^(/request).*bla1$ {
        proxy_pass  http://localhost:8082;
    }
    # for default location use balancer
    location / {
        proxy_pass  http://cluster;
    }

}

upstream cluster {
    server localhost:8081;
    server localhost:8082;
}

但不幸的是,这种配置不起作用。我总是收到循环请求,即/request?q=bla0转到任一主机。我缺少什么。

位置与参数不匹配。从

location指令仅尝试从 主机名,要在第一个之前吗?或者#。(在该范围内 与未设置的url匹配。)


看起来您需要在
if()
中使用该指令,但我对此不是很肯定。啊,我们开始吧,看起来像你想要的。

位置与参数不匹配。从

location指令仅尝试从 主机名,要在第一个之前吗?或者#。(在该范围内 与未设置的url匹配。)


看起来您需要在
if()
中使用该指令,但我对此不是很肯定。啊,我们来了,看起来像你想要的。

好提示,这就是我要找的。所以位置规则变成这样:location/{proxy_pass;if($args~pattern1){proxy_pass}if($args~pattern2){proxy_pass}}很棒的提示,这就是我要找的。所以位置规则变成这样:location/{proxy_pass;if($args~pattern1){proxy_pass}if($args~pattern2){proxy_pass}