在 haproxy use_backend 中使用多个条件

在 haproxy use_backend 中使用多个条件

如果没有括号,似乎不可能让 haproxy 根据以下条件选择 use_backend:true and (a or b)

例如,我想要use_backend ClusterA if allowed_src and (method_a or path_b)。无论我是否反转 之前/之后的条件and,我都可以用一个真值来命中后端,而不是要求和allowed_src之一。method_apath_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

相关内容