Назад | Перейти на главную страницу

Использование нескольких условных выражений в 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_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