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

Порядок соответствия Haproxy "use_backend"

У меня проблема с HAProxy, это фрагмент моего haproxy.cfg ниже,

acl url_a path_beg   /a
acl dom_eye hdr_dom(host) -i www.mydomin.com
use_backend eye1 if dom_eye
use_backend eye2 if dom_eye url_a
  1. когда я приезжаю www.mydomin.com/a, он использует глаз2
  2. когда я приезжаю www.mydomin.com/a/b, он использует глаз1

но я ожидал, что все URL-адреса начинаются с / а используйте eye2.

И я обнаружил, что при переключении порядка use_backend как показано ниже,

acl url_a path_beg   /a
acl dom_eye hdr_dom(host) -i www.mydomin.com
use_backend eye2 if dom_eye url_a
use_backend eye1 if dom_eye

у меня это сработало.

Но я не понимаю «правила порядка соответствия» Haproxy и не могу найти объяснений в Google.

Есть идеи по этому поводу?

Я не знаю, почему это не работает для вас, но в документации HAProxy указано:

Правил use_backend может быть сколько угодно. Все эти правила оцениваются в порядке их объявления, и первое соответствующее правило назначает бэкэнд.

Из: http://cbonte.github.io/haproxy-dconv/configuration-1.4.html#4-use_backend

Глядя на ваш код:

acl url_a path_beg /a
acl dom_eye hdr_dom(host) -i www.mydomin.com
use_backend eye1 if dom_eye
use_backend eye2 if dom_eye url_a

Ожидаю следующих результатов:

www.mydomin.com -> eye1
www.mydomin.com/a -> eye1
www.mydomin.com/a/b -> eye1

Потому что все они соответствуют первому use_backend.

Если вы измените конфигурацию на:

acl url_a path_beg /a
acl dom_eye hdr_dom(host) -i www.mydomin.com
use_backend eye2 if dom_eye url_a
use_backend eye1 if dom_eye

Я ожидал таких результатов:

www.mydomin.com -> eye1
www.mydomin.com/a -> eye2
www.mydomin.com/a/b -> eye2

Потому что только URL 2 и 3 соответствуют первому use_backend.

Не могли бы вы подтвердить, что это не то, что происходит в вашей конфигурации?