nginx负载均衡器/位置拼图

时间:2013-09-27 13:25:04

标签: 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
    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进入任一主机。我错过了什么。

1 个答案:

答案 0 :(得分:1)

位置与参数不匹配。来自http://wiki.nginx.org/HttpCoreModule#location

  

location指令仅尝试从第一个/之后匹配   主机名,到第一个之前?要么 #。 (在这个范围内,它   匹配未转义的网址。)

看起来您需要在if()内使用arg_*指令,但我对此并不乐观。啊,我们走了,this看起来像你想要的。