2016-11-30 95 views
1

我對HAProxy非常陌生。我花了幾個小時試圖找出如何去做,但無法獲得任何線索。我的要求是這樣的:配置HAProxy根據url_param路由流量

如果請求的終點是/ special,那麼我需要檢查URL_PARAM。

例如:本地主機/特殊ID = 10

基於ID,我需要將其路由到3的一臺服務器。 If id <=3 server1, if id > 3 and id <=6 server2 else server3

如果結束點不是所有3臺服務器之間的特殊輪循機制。

我該如何實現這2級的平衡?

回答

2

您可以使用urlpurlp_val來提取id。然後,使用acl至match the integer

acl is_special  path_beg /special 
acl small_id   urlp_val(id) le 3 
acl medium_id  urlp_val(id) 4:6 
acl high_id   urlp_val(id) gt 6 

use_backend bck1  if is_special small_id 
use_backend bck2  if is_special medium_id 
use_backend bck3  if is_special high_id 
default_backend  bck_all 

然後,創建3個後端:每個案例一個。

編輯:

如果你想在查詢參數使用正則表達式,使用urlp_reg

acl small_id  urlp_reg(id) ^[0-3] 
acl medium_id  urlp_reg(id) ^[4-6] 
acl high_id  urlp_reg(id) ^[7-9] 

還要檢查stick,這取決於你想做什麼。

+0

非常感謝!但是如果整數ID真的很大。如果它只能被視爲字符串。對於在示例中未明確表示的道歉。我可以使用某種正則表達式匹配嗎? – Maxsteel

+0

對不起,我剛剛從我的數據示例中認識到ID基本上來自UID。 – Maxsteel

+0

'urlp_reg'將起作用(請參閱我的編輯)。 –