Problema com vários sites no mesmo vps com haproxy

Problema com vários sites no mesmo vps com haproxy

Configurar

Eu tenho um VPSque estou usando docker. Atualmente tenho 3 contêineres. 1 para haproxy e os outros 2 contêineres contêm seus sites individuais (executando um servidor http nodejs na porta 8080).

Eu tenho o seguinte domínio e subdomínios.

  • meudominio.com
  • deus.ex.machina.meudominio.com
  • fela.meudominio.com

Eu gostaria de mydomain.comir para o primeiro dos dois servidores de nó e fela.mydomain.comir para o outro servidor de nó. O terceiro domínio deus.ex.machina.mydomain.comdeve ir para um endereço IP que não existe, para simular a queda de um servidor para que eu possa ter certeza de que a página 503 será exibida.

Aqui está o meu haproxy.cfg:

global
    log 127.0.0.1 local0 notice
    maxconn 2000
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin
    stats timeout 30s
    user haproxy
    group haproxy

defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    retries 3
    option http-server-close
    timeout connect 5000
    timeout client  10000
    timeout server  10000

listen stats
    bind       :1988
    stats uri /

frontend http-in
        bind *:80

        # define hosts
        acl host_deusexmachina  hdr_beg(host) -i deus.ex.machina.mydomain.com
        acl host_fela           hdr_beg(host) -i fela.mydomain.com
        acl host_mydomain       hdr_beg(host) -i mydomain.com

        # figure out which one to use
        use_backend deusexmachina_cluster   if host_deusexmachina
        use_backend fela_cluster            if host_fela
        use_backend mydomain_cluster        if host_mydomain

backend deusexmachina_cluster

        balance roundrobin
        cookie SERVERID insert indirect nocache

        server deusexmachina_s1 172.17.0.99:8080 check cookie deusexmachina_s1

backend fela_cluster

        balance roundrobin
        cookie SERVERID insert indirect nocache

        server fela_s1 172.17.0.59:8080 check cookie fela_s1

backend mydomain_cluster

        balance roundrobin
        cookie SERVERID insert indirect nocache

        server mydomain_s1 172.17.0.50:8080 check cookie mydomain_s1
  • 172.17.0.50:8080 está funcionando (nodejs na porta 8080)
  • 172.17.0.59:8080 está funcionando (nodejs na porta 8080)
  • 172.17.0.99:8080 não está funcionando (simula nodejs inativo)

Todas as solicitações para todos os três vêm do mesmo endereço IP (mesmo dispositivo), razão pela qual eu tenho option http-server-close.

Problema

Isso deixa a questão:qual é o problema?

Eles estão redirecionando corretamente aproximadamente 90% das vezes.

  • Se eu conectar mydomain.come apertar o botão de atualização 9 em cada 10 vezes, a página correta será exibida (172.17.0.50:8080), o 1º momento ímpar exibirá 503 (como se fosse direcionado deus.ex.machina.mydomain.comou talvez fosse o servidor? Eu não sei como verificar isso).

  • Pois fela.mydomain.comao apertar o botão de atualização, 9 em cada 10 vezes a página correta aparecerá (172.17.0.59:8080), a 1 vez ímpar exibirá a mydomain.compágina (não a página 503) (172.17.0.50:8080).

  • E o mesmo vale para deus.ex.machina.mydomain.comquando você pressiona o botão de atualização, 9 em cada 10 vezes a página correta aparecerá (erro 503), a 1 vez ímpar exibirá a mydomain.compágina (não a página 503) (172.17.0.50:8080).

Adicionar option httpclosetorna ainda pior a chance de 50/50 de redirecionar para a página errada.

Tenho todos os três domínios abertos em guias no mesmo navegador Chrome, alterno entre eles e os atualizo.

Suspeito que o haproxy está confundindo as solicitações. Talvez armazenando em cache para qual back-end uma solicitação IP deve ir? Como visto estou usando cookies que devem direcionar a solicitação para o servidor correto (verifiquei os cookies do cliente e estão todos em ordem). Estou nisso há horas, não sei mais o que tentar.

informação relacionada