HAProxy - encaminhar para um servidor da web diferente com base no URI

14

Eu tenho um farm HTTP com a seguinte configuração:

listen webfarm 10.254.23.225:80
       mode http
       balance roundrobin
       cookie SERVERID insert
       option httpclose
       option forwardfor
       option httpchk HEAD /check.txt HTTP/1.0
       server webA 10.254.23.4:80 cookie A check
       server webB 10.248.23.128:80 cookie B check

Eu gostaria de adicionar uma opção que encaminharia todas as solicitações de um URI específico (por exemplo, / special) para um terceiro servidor da web. Como devo fazer isso?

Saggi Malachi
fonte

Respostas:

23

Aqui está um post que escrevi sobre balanceamento de carga com base nos cabeçalhos do host:

http://www.mattbeckman.com/2009/09/18/using-the-acl-in-haproxy-for-load-balancing-named-virtual-hosts/

Se você gostaria de corresponder a um URI ou diretório, sugiro usar path_beg em vez de hdr_end que é usado no exemplo fornecido nessa página. Abaixo está um exemplo de como você pode fazer isso com sua configuração:

frontend http-in
    bind 10.254.23.225:80
    acl has_special_uri path_beg /special
    use_backend special_server if has_special_uri
    default_backend webfarm

backend webfarm
    balance roundrobin
    cookie SERVERID insert
    option httpchk HEAD /check.txt HTTP/1.0
    option httpclose
    option forwardfor
    server webA 10.254.23.4:80 cookie webA check
    server webB 10.248.23.128:80 cookie webB check

backend special_server
    balance roundrobin
    cookie SERVERID insert
    option httpchk HEAD /check.txt HTTP/1.0
    option httpclose
    option forwardfor
    server webC 10.0.0.1:80 cookie webC check

Espero que ajude!

Matt Beckman
fonte
Ei, só vi sua resposta agora. Na verdade, eu já resolvi usando essa mesma solução. Obrigado pela sua resposta!
Saggi Malachi
Este link não está mais ativo. No entanto, ele ainda pode ser visualizado aqui: web.archive.org/web/20160404161136/http://www.techrawr.com/2009/…
jaggedsoft 23/16
1
Obrigado @NextLocal - atualizei o link. Deixei o domínio anterior expirar, mas era um alias para o link atualizado acima.
Matt Beckman