我想将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进入任一主机。我错过了什么。
答案 0 :(得分:1)
位置与参数不匹配。来自http://wiki.nginx.org/HttpCoreModule#location
location指令仅尝试从第一个/之后匹配 主机名,到第一个之前?要么 #。 (在这个范围内,它 匹配未转义的网址。)