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, это использует eye2
  2. когда я посещаю www.mydomin.com/a/b, это использует eye1

но я ожидал бы, что весь URL начинается с использования/a 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.

Какие-либо идеи об этом?

5
задан 27 October 2015 в 20:19
1 ответ

Я не знаю, почему это не работает для вас, но в документации 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 .

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

9
ответ дан 3 December 2019 в 01:13

Теги

Похожие вопросы