Без скобок, похоже, невозможно выбрать 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 различны.
Ответ, который написал Вадим, соответствует тому, о чем вы изначально просили. Чтобы соответствовать вашему обновленному вопросу, вы можете использовать следующую логику:
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 соответствует URL-адресам, начинающимся с / path_a
Последняя строка означает, что запрос будет привязан к ClusterA бэкэнд если исходный IP-адрес 123.123.123.123 и если URL-адрес начинался с / path_a или если исходный IP-адрес был 123.123.123.123, а метод HTTP был POST.
Вместо METH_POST вы можете использовать различные предопределенные ACL. Проверять, выписываться Документация HAProxy чтобы увидеть полный список.
acl allowedsrc .......
acl mypath path_beg /path_a /path_b
use_backend ClusterA if allowedsrc mypath