Como desviar o tráfego com base no nome do host usando o HAProxy?

17

Eu tive algum sucesso inicial com o HAProxy, configurando vários servidores de aplicativos ouvindo em várias outras portas.

Agora tenho outro servidor da Web escutando em uma porta e gostaria de saber quais alterações fazer na minha configuração para que também fluam o tráfego pelo nome do host.

A seguir está a configuração atual, assumindo:

  • meu servidor web apache está sendo executado no examplecom: 8001
  • meu monte de servidores de aplicativos 0.0.0.0:8081, 0.0.0.0:8082, 0.0.0.0:8083
global
  log 127.0.0.1 local0
  log 127.0.0.1 local1 notice
  maxconn 4096
  debug
  #quiet
  #user haproxy
  #group haproxy

defaults
  log global
  mode  http
  option  httplog
  option  dontlognull
  retries 3
  redispatch
  maxconn 2000
  contimeout  5000
  clitimeout  50000
  srvtimeout  50000

listen appservers 0.0.0.0:80
  mode http
  balance roundrobin
  option httpclose
  option forwardfor
  #option httpchk HEAD /check.txt HTTP/1.0
  server  inst1 0.0.0.0:8081 cookie server01 check inter 2000 fall  3
  server  inst2 0.0.0.0:8082 cookie server02 check inter 2000 fall  3
  server  inst3 0.0.0.0:8083 cookie server01 check inter 2000 fall  3
  server  inst4 0.0.0.0:8084 cookie server02 check inter 2000 fall  3
  capture cookie vgnvisitor= len 32

(quaisquer outros comentários sobre a configuração ^ são bem-vindos.)

Agora eu gostaria de continuar o mesmo acima, mas, além disso, caso - se o nome do host for myspecialtopleveldomain <dot> com, você gostaria de fluir o tráfego para o exemplo <dot> com: 8001

~ B

Bosky
fonte
2
É possível enviar solicitações para diferentes servidores com base no nome do host usando a configuração de front-end e back-end. Sua pergunta é um pouco confusa, você menciona example.com:8001, mas não está na configuração em nenhum lugar. Esse é o destino das solicitações para myspecialtopleveldomain.com na porta 80? Talvez você possa fornecer alguns exemplos de URLs que os usuários digitarão e para onde deseja que esses URLs sejam enviados por haproxy.
ThatGraemeGuy

Respostas:

24

Aqui está um exemplo:

frontend http
        bind 0.0.0.0:80
        default_backend www
        # NAT static host names and static paths in other hostnames to a different backend
        acl host_static hdr_beg(host) -i static.
        acl url_static  path_beg         /static
        use_backend static if host_static or url_static

backend www
        balance roundrobin
        server  qa1 10.177.1.81:80
        server  qa2 10.177.1.45:80

backend static
        balance roundrobin
        server  media1 10.177.0.86:80
Chase Seibert
fonte
Agradecimentos para a configuração de exemplo, você acabou de me ajudou a finalizar a nossa configuração balanceador de carga :)
isNaN1247