Como posso fazer solicitações de rotas haproxy com base em substrings de URL?

13

Um balanceador de carga é configurado com dois back-ends.

O URI da solicitação terá a seguinte aparência:

http://example.com/answers/submit
http://example.com/tag-02/answers/submit

Como posso configurar o haproxy de forma que a solicitação seja enviada para um ou outro dos dois back-ends, dependendo do formato do URI da solicitação? A única diferença entre as solicitações está /tag-02/no URI da solicitação.

Um arquivo de configuração haproxy para isso com um pouco de explicação seria muito apreciado, já que eu sou novo no haproxy.

Autodidata
fonte

Respostas:

13

Você deseja usar ACLs :

backend be1 # this is your default backend
  ...
backend be2 # this is for /tag-02 requests
  ...

frontend fe
  ...
  default_backend be1
  acl url_tag02 path_beg /tag-02
  use_backend be2 if url_tag02

A seção 7 do guia de configuração do HAProxy contém os detalhes das ACLs, mas você precisa conhecer o use_backendencantamento mágico oculto na seção 4 do guia para saber o que fazer com as ACLs.

natacado
fonte
1
Embora o estilo ACL declarado seja geralmente mais legível e reutilizável, você pode, se preferir, incluir a declaração ACL na use_backendprópria diretiva, com use_backend be2 if { path_beg /tag-02 }.
Womble
0

Para fornecer um exemplo melhor para a resposta acima, abaixo está um exemplo de configuração.

frontend https-in
   bind *:443 ssl crt /etc/ssl/server.pem
   mode http
   redirect scheme https if !{ ssl_fc }

   acl uri_help path_beg /help
   use_backend help if uri_help

backend help
    balance     roundrobin
    server      help yourbackendserver.com check
Joel Nishanth Ponukumatla
fonte