Ordem de correspondência haproxy "use_backend"

3

Eu tenho um problema com o HAProxy, é um trecho do meu haproxy.cfg abaixo,

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. quando visito www.mydomin.com/a , ele usa eye2
  2. quando visito www.mydomin.com/a/b , ele usa eye1

mas eu esperaria que todo o URL comece com / a use eye2.

E, descobri que quando mudar a ordem de use_backend como abaixo,

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

funcionou para mim.

Mas eu não entendo a "regra de ordenação" da Haproxy e não consigo encontrar nenhuma explicação do google.

Alguma idéia sobre isso?

    
por glancesx 27.11.2014 / 08:03

1 resposta

7

Eu não sei porque isso não funciona para você, mas a documentação do HAProxy diz:

There may be as many "use_backend" rules as desired. All of these rules are evaluated in their declaration order, and the first one which matches will assign the backend.

De: link

Olhando para o seu código:

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

Espero os seguintes resultados:

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

Porque todos eles correspondem ao primeiro use_backend .

Se você alterar a configuração para:

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

Espero que esses resultados:

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

Porque somente os URLs 2 e 3 correspondem ao primeiro use_backend .

Você poderia confirmar que isso não é o que acontece na sua configuração?

    
por 27.11.2014 / 09:23