如果没有括号,似乎不可能让 haproxy 根据以下条件选择 use_backend:true and (a or b)
例如,我想要use_backend ClusterA if allowed_src and (method_a or path_b)
。无论我是否反转 之前/之后的条件and
,我都可以用一个真值来命中后端,而不是要求和allowed_src
之一。method_a
path_b
*更新示例,使得所有三个 ACL 都是不同的。
答案1
Vadim 写的答案实现了您最初提出的问题。为了匹配更新后的问题,您可以使用以下逻辑:
acl allowedsrc src 123.123.123.123
acl mypath path_beg /path_a
use_backend ClusterA if allowedsrc mypath || allowedsrc METH_POST
因为你没有提到你想要匹配什么允许源ACL,我假设您想要匹配特定的 IP 地址。
让我用简单的英语把整个逻辑分解一下。
acl allowedrc 匹配源 IP 123.123.123.123
acl mypath 匹配以以下项开头的 URL/path_a
最后一行意味着请求将被指向簇A后端如果源 IP 地址为 123.123.123.123和如果 URL 以 /path_a 开头或者如果源 IP 地址是 123.123.123.123 并且 HTTP 方法是 POST。
除了 METH_POST,您还可以使用不同的预定义 ACL。请查看HAProxy 的文档查看完整列表。
答案2
acl allowedsrc .......
acl mypath path_beg /path_a /path_b
use_backend ClusterA if allowedsrc mypath