Haproxy
後端條件中的複雜 AND/OR
我正在嘗試在以下情況下使用後端:
它是被請求的產品站點(即有 mysite.com 和 beta.mysite.com)
和
這是一個api請求
或者
這是一個選擇加入的請求
對於每種情況,我都有以下 acls 設置:
acl prod hdr_beg(host) -i mysite.com acl url_api path_beg /api/ acl url_opt-in path_beg /opt-in/
我現在想像這樣重定向到 prod-api-backend:
use_backend prod-api-backend if prod AND ( url_api OR url_opt-in )
但是,我似乎無法弄清楚如何在不收到配置錯誤的情況下編寫這樣的條件。
haproxy 邏輯中沒有“和”,但如果你擴展括號並這樣寫,你應該很好:
use_backend prod-api-backend if prod url_opt-in or prod url_api
當您指定多個條件時,連詞(“and”)運算符是隱式的。當你這樣做的時候的意思:
acl foo ... acl bar ... use_backend ... if foo bar
use_backend
如果兩者都匹配foo
則bar
執行。您可以指定||
或or
介於兩者之間foo
並bar
使其成為析取。如果您想要結合和析取的混合,最簡單的方法是採用不同的方法。
如果您在同一個 ACL 標識符下指定多個條件,則如果任何條件匹配,則 ACL 評估為真。例如:
acl url_matches path_beg /api/ acl url_matches path_beg /opt-in/ use_backend ... if url_matches
由於您使用相同的條件(
url_matches
零件),因此您還可以在一行上指定多個比較目標。例如:acl url_matches path_beg /api/ /opt-in/ use_backend ... if url_matches
因此,將其放在一起,選擇上述兩種解決方案中的後者,您可以執行以下操作:
acl prod hdr_beg(host) -i mysite.com acl url_matches path_beg /api/ /opt-in/ use_backend prod-api-backend if prod url_matches