1

我想将 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 去任一主机。我错过了什么。

4

1 回答 1

1

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

location 指令仅尝试从主机名的第一个 / 之后匹配到第一个 ? 或者 #。(在该范围内,它匹配未转义的 url。)

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

于 2013-09-27T15:03:54.933 回答