2016-08-05 30 views
0

我有兩個URL,如下所示。HAPROXY ACL適用於相同上下文不同的主機

https://xyz.test.com/abc 
and 
https://xyz-a.test.com/abc 

因我所定義HAProxy的ACL爲: -

acl is_1 path_beg /abc 
use_backend server_1 if is_1 

acl is_2 hdr(host) -i xyz-a.test.com 
use_backend server_2 if is_2 

但是它總是在服務器1結束,即使我嘗試通過URL

https://xyz-a.test.com/abc 

請建議瀏覽它我如何處理以上情況。

我可以如下使用訪問控制列表,來解決這個問題: -

acl is_1 hdr(host) -i xyz.test.com 
use_backend server_1 if is_1 

acl is_2 hdr(host) -i xyz-a.test.com 
use_backend server_2 if is_2 

不過,我想保持第一的ACL: -

acl is_1 path_beg /abc 
use_backend server_1 if is_1 

任何建議!

+0

我m投票結束這個問題作爲脫離主題,因爲它是關於配置haproxy。 –

回答

1

有幾種不同的方法來解決這個問題。以下是最簡單的一個:只是顛倒你的use_backend語句的順序!

acl is_1 path_beg /abc 
acl is_2 hdr(host) -i xyz-a.test.com 

use_backend server_2 if is_2 
use_backend server_1 if is_1 

另一種方法是使用AND條件,這固然看起來HAProxy的有點怪異(你只是追加要與,ACL,可能與調節劑):

acl is_1 path_beg /abc 
acl is_2 hdr(host) -i xyz-a.test.com 

use_backend server_1 if is_1 !is_2 
use_backend server_2 if is_2 
+0

考慮到您提供的第一個解決方案,是在haproxy中使用後端事務的位置? 這些事情究竟是如何發揮作用的,以便改變立場使其發揮作用? –

+0

就像命令式的計算機程序一樣,語句按順序進行評估。匹配其條件的第一個use_backend語句將觸發。否則,它將使用default_backend。 – mwp

相關問題