Haproxy

在 haproxy use_backend 中使用多個條件

  • November 16, 2018

沒有括號,似乎不可能有 haproxy select use_backend 基於true and (a or b)

例如,我想use_backend ClusterA if allowed_src and (method_a or path_b). 無論我是否在 before/after 反轉條件and,我都可以使用單個 true 值而不是要求其中一個或一個來allowed_src訪問method_a後端path_b

*更新範例,使所有三個 ACL 都是不同的。

Vadim 寫的答案達到了您最初提出的要求。為了匹配您更新的問題,您可以使用以下邏輯:

acl allowedsrc src 123.123.123.123
acl mypath path_beg /path_a
use_backend ClusterA if allowedsrc mypath || allowedsrc METH_POST

由於您沒有提及您嘗試與allowedsrc ACL 匹配的內容,我假設您想要匹配某個 IP 地址。

讓我把整個邏輯分解成簡單的英語。

acl allowedsrc 匹配源 IP 123.123.123.123

acl mypath 匹配以**/path_a開頭的 URL**

最後一行表示如果源 IP 地址為 123.123.123.123URL 以 /path_a 開頭或****源IP 地址為 123.123.123.123 且 HTTP 方法為 POST ,則請求將指向ClusterA後端。

除了 METH_POST,您可以使用不同的預定義 ACL。查看HAProxy 的文件以查看完整列表。

引用自:https://serverfault.com/questions/940268