Backend HAProxy - Como conectar-se ao servidor remoto?

Backend HAProxy - Como conectar-se ao servidor remoto?

Boa tarde a todos,

Sou um novato em hospedagem na web e ainda sinto que estou aprendendo a nadar no meio do oceano. O que eu quero fazer é configurar o HAproxy para encaminhar uma solicitação para um servidor remoto no back-end. Este servidor é SSL e está atrás do Cloudflare.

Pesquisei em toda a Internet, mas até agora não consigo encontrar uma resposta direta e clara à minha pergunta. Extraí a imagem haproxy e a uso em um contêiner com um arquivo haproxy.cfg externo. Ninguém esclarece se você pode usar como servidor no backend, um servidor fora da sua rede (não local) e mais ainda como usar SSL para esta comunicação. Se algum de vocês tiver algum conhecimento sobre isso, eu apreciaria uma resposta se isso for possível e como.

Eu uso por enquanto em um contêiner de servidor NginxProxyManager e estou pesquisando os recursos de balanceamento de carga do HAProxy. Até agora, fiz roundrobin com sucesso em torno de contêineres locais, mas com servidores ausentes, sempre recebo a resposta nas estatísticas "Inativo para manutenção". Também executei em um terminal no contêiner ha-proxy um comando wget e ele pode ver o mundo exterior. Se eu fizer ping de dentro do contêiner HAProxy do Google, ele fará ping. Todos os contêineres estão conectados à rede de ponte e a uma rede criada pelo usuário (driver de ponte) no docker. É por isso que estou completamente confuso. Então, a questão principal é: isso pode ser feito e se for possível, é possível o seguinte cenário (?):

  1. Cliente faz solicitação https para HAProxy
  2. Com roundrobin eu (gostaria) de alternar entre contêineres locais e servidores remotos
  3. Quando chegar à rodada de "servidor remoto", gostaria de enviar do back-end o Host do servidor correto (reescrito - já posso fazer isso, mas para contêineres locais) junto com a informação de que se trata de uma solicitação SSL.
  4. Então o NginxProxyManager ou outro HAProxy o desviaria para o contêiner conectado lá, obteria a resposta e enviaria de volta para o (1º) HAProxy e este último para o cliente.

Eu nem tenho certeza se isso é possível. Dê uma olhada no seguinte. Funciona com contêineres locais, mas não com um servidor remoto. Ele envia a solicitação e reescreve o nome do cabeçalho Host. Aqui está o haproxy.cfg

global
        maxconn     4000
        daemon

defaults
        mode    http
        default-server init-addr last,libc,none
        option  http-keep-alive
        option  redispatch
        retries 3
        timeout connect 10s
        timeout client  1m
        timeout server  1m
        option forwardfor 


resolvers mynameservers
   nameserver ns2 8.8.8.8:853


frontend stats
        bind *:8500
        stats enable
        stats uri /
        stats refresh 10s


frontend ft
        bind 0.0.0.0:443 ssl crt /usr/local/etc/haproxy/ha_trial.pem  
        default_backend bt2

backend bt2
        balance roundrobin
        http-send-name-header Host        
        server web1 web1:8080 check
        server web2 web2:8080 check
        server web3 web3:8080 check        
        server myback.mysite.com myback.mysite.com:443 ssl verify none resolvers mynameservers
## the latter does not work - it ends at down for maintenance in statistics and in logs it says: Layer6 invalid response, info: "SSL handshake failure" while it is "verify none"

Se você puder me ajudar com uma resposta, se souber e/ou algumas referências, todas as pessoas como eu e principalmente eu, agradeceriam muito.

Obrigado

Responder1

O caso é exatamente um caso de falha de handshake SSL porque a imagem do docker HAProxy não está habilitada para QUIC e o backend está por trás do Cloudflare, que ele suporta por padrão QUIC. Se eu usar outro domínio que não esteja habilitado para QUIC no protocolo de comunicação de https tudo funciona perfeitamente. Também estou curioso para saber por que diabos ele lida com o front-end e o back-end de maneira diferente ??? No front-end ele entende QUIC (? - ou é QUIC entre você e o cloudflare e o cloudflare para o servidor tem criptografia diferente?), Mas a conexão do back-end não é possível?

Resumindo:

  1. A imagem do docker HAProxy não está habilitada para QUIC - pelo menos a que tenho (alpina)
  2. A Cloudflare ativou o QUIC por padrão como protocolo de comunicação para seus produtos e você não tem permissão para alterá-lo.
  3. A cooperação desses dois é obviamente impossível e isso lança na sua cara uma "Falha no aperto de mão SSL"
  4. Para corrigi-lo, use um provedor que não ofereça suporte aos protocolos de comunicação de tecnologia mais recente - ok, por enquanto, isso é apenas uma mitigação e nenhuma solução.
  5. O site HAProxy fornece uma maneira de recompilar o HAProxy do github com suporte QUIC e irei pesquisar mais tarde ...

informação relacionada