У меня проблема с 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
но я ожидал, что все 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
.
Не могли бы вы подтвердить, что это не то, что происходит в вашей конфигурации?