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 (?):
- Cliente faz solicitação https para HAProxy
- Com roundrobin eu (gostaria) de alternar entre contêineres locais e servidores remotos
- 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.
- 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:
- A imagem do docker HAProxy não está habilitada para QUIC - pelo menos a que tenho (alpina)
- 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.
- A cooperação desses dois é obviamente impossível e isso lança na sua cara uma "Falha no aperto de mão SSL"
- 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.
- O site HAProxy fornece uma maneira de recompilar o HAProxy do github com suporte QUIC e irei pesquisar mais tarde ...