2013-09-27 175 views
1

我想將nginx設置爲負載均衡器。但我想設置它的方式是某些請求(具有特定參數)只會發送到某些主機。基本上想法是在原始請求中使用任何主機,然後如果用戶指定某個參數,例如bla0,然後將請求重定向到主機0,而對於BLA1主辦1.因此,這裏是我的配置想出了:nginx負載均衡器/位置難題

# 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; 
} 

但不幸的是這種配置不起作用。我總是得到輪詢請求,即/請求?q = bla0進入任一主機。我錯過了什麼。

回答

1

位置與參數不匹配。從http://wiki.nginx.org/HttpCoreModule#location

位置指令僅嘗試從第一場比賽/在 主機名後,以之前的第一?要麼 #。 (在此範圍內,它 轉義的URL匹配。)

看起來你需要使用if()arg_*指令,但我還不能肯定這一點。啊,我們走吧,this看起來像你想要的。

+0

偉大的提示,這是我一直在尋找。所以位置規則變成這樣:location/{proxy_pass http:// cluster; if($ args〜pattern1){proxy_pass http:// host1} if($ args〜pattern2){proxy_pass http:// host2}} – Valentin