Backend de HAProxy: ¿Cómo conectarse a un servidor remoto?

Backend de HAProxy: ¿Cómo conectarse a un servidor remoto?

Buenas tardes a todos,

Soy un novato en alojamiento web y todavía siento que estoy aprendiendo a nadar en medio del océano. Lo que quiero hacer es configurar HAproxy para reenviar una solicitud a un servidor remoto en el back-end. Este servidor es SSL y está detrás de Cloudflare.

Busqué en todo Internet pero hasta ahora no puedo encontrar una respuesta clara a mi pregunta. Saqué la imagen de haproxy y la uso en un contenedor con un archivo haproxy.cfg externo. Nadie aclara si se puede utilizar como servidor en el backend, un servidor alejado de su red (no local) y más aún cómo utilizar SSL para esta comunicación. Si alguno de ustedes tiene algún conocimiento sobre esto, agradecería una respuesta si es factible y cómo.

Utilizo por ahora en un contenedor de servidor NginxProxyManager y estoy investigando las capacidades de equilibrio de carga de HAProxy. Hasta ahora he realizado con éxito una operación por turnos en contenedores locales, pero con servidores ausentes siempre obtengo la respuesta en las estadísticas "Inactivo por mantenimiento". También ejecuté en una terminal en el contenedor ha-proxy un comando wget y puedo ver el mundo exterior. Si hago ping desde el interior del contenedor HAProxy de Google, lo hace. Todos los contenedores están conectados tanto a la red puente como a una red creada por el usuario (controlador puente) en la ventana acoplable. Por eso estoy completamente confundido. Entonces, la pregunta principal es: ¿se puede hacer y, si es posible, es posible el siguiente escenario (?):

  1. El cliente realiza una solicitud https a HAProxy
  2. Con roundrobin (me gustaría) desplazarme entre contenedores locales y servidores remotos
  3. Cuando llegue a la ronda del "servidor remoto", me gustaría enviar desde el backend el Host del servidor correcto (reescrito; ya puedo hacer esto, pero para contenedores locales) junto con la información de que se trata de una solicitud SSL.
  4. Luego, NginxProxyManager u otro HAProxy lo desviaría al contenedor conectado allí, obtendría la respuesta y la enviaría de regreso al (primer) HAProxy y este último al cliente.

Ni siquiera estoy seguro de si esto es posible. Eche un vistazo a lo siguiente. Funciona con contenedores locales pero no con un servidor remoto. Envía la solicitud y reescribe el nombre del encabezado del Host. Aquí está el 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"

Si puedes ayudarme con una respuesta si la conoces y/o algunas referencias, todas las personas como yo y especialmente yo, te lo agradecería mucho.

Gracias

Respuesta1

El caso es exactamente un caso de falla de protocolo de enlace SSL debido a que la imagen acoplable de HAProxy no está habilitada para QUIC y el backend está detrás de Cloudflare, que admite QUIC de forma predeterminada. Si uso otro dominio que no esté habilitado para QUIC en el protocolo de comunicación de https, todo funciona de maravilla. También tengo curiosidad por saber por qué maneja el frontend y el backend de manera diferente. En el front-end entiende QUIC (? - ¿O es QUIC entre usted y Cloudflare y el cifrado de Cloudflare al servidor es diferente?) Pero no es posible conectarse desde el backend.

Entonces, en pocas palabras:

  1. La imagen acoplable de HAProxy no está habilitada para QUIC: al menos la que tengo (alpina)
  2. Cloudflare ha activado QUIC de forma predeterminada como protocolo de comunicación para sus cosas y no puedes cambiarlo.
  3. La cooperación de estos dos es obviamente imposible y te arroja a la cara un "Error de protocolo de enlace SSL".
  4. Para solucionarlo, utilice un proveedor que no admita protocolos de comunicación de última tecnología; por ahora, esto es solo una mitigación y no es una solución.
  5. El sitio HAProxy proporciona una forma de recompilar HAProxy desde github con soporte QUIC y lo investigaré más adelante...

información relacionada