Configuración de HAProxy detrás de Cloudflare

Artículos Guías Manuales Sistemas Linux Windows Binario 0

El siguiente fichero de configuración de HAProxy está diseñado para operar detrás de Cloudflare, evitando latencia y asegurando compatibilidad con los protocolos utilizados. Además, se explican algunos aspectos técnicos relacionados con las incompatibilidades de configuración que podrían surgir al implementar HAProxy en este escenario.

Configuración de HAProxy

# Configuración global
global
        log /dev/log    local0
        log /dev/log    local1 notice
        chroot /var/lib/haproxy
        user haproxy
        group haproxy
        daemon
        maxconn 8192

# Configuración por defecto
defaults
#       log     global
#       option  httplog
#       option  dontlognull
        timeout http-request 30s
        timeout connect 60s
        timeout client  60s
        timeout server  60s
        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        errorfile 408 /etc/haproxy/errors/408.http
        errorfile 500 /etc/haproxy/errors/500.http
        errorfile 502 /etc/haproxy/errors/502.http
        errorfile 503 /etc/haproxy/errors/503.http
        errorfile 504 /etc/haproxy/errors/504.http

# Frontend HTTP
frontend www80_front
        bind :80
        mode http
#       option httplog
        use_backend example80 if { hdr(host) -i example.com }
        use_backend example80 if { hdr(host) -i www.example.com }
        use_backend example80 if { hdr(host) -m reg ^.*\.example.com$ }

# Frontend HTTPS
frontend www443_front
        mode tcp
        bind :443
#       option tcplog
        tcp-request content accept if { req_ssl_hello_type 1 }
        use_backend example443 if { req.ssl_sni -i example.com }
        use_backend example443 if { req.ssl_sni -i www.example.com }
        use_backend example443 if { req.ssl_sni -m reg ^.*\.example.com$ }

# Backend HTTP
backend example80
        mode http
        server example80_server 192.168.20.14:80 send-proxy check

# Backend HTTPS
backend example443
        mode tcp
        server example443_server 192.168.20.14:443 send-proxy check

Puntos clave de la configuración

  1. Compatibilidad con Cloudflare:
    • Cloudflare actúa como un proxy inverso, por lo que las configuraciones de HAProxy deben estar alineadas para evitar problemas de latencia o incompatibilidad.
    • El protocolo accept-proxy en los frontend no es compatible con Cloudflare, ya que este protocolo espera encabezados de proxy adicionales que Cloudflare no envía.
  2. Configuración del Backend:
    • El uso de send-proxy-v2 en los backend genera incompatibilidades con servidores Apache. Por este motivo, en el archivo configurado, se utiliza send-proxy en lugar de send-proxy-v2.
  3. Optimizaciones de rendimiento:
    • Se han definido timeouts adecuados para garantizar una conexión rápida y estable sin comprometer la experiencia del usuario final.
  4. Soporte para múltiples dominios:
    • La configuración está preparada para manejar diferentes dominios y subdominios mediante reglas de hdr(host) en HTTP y req.ssl_sni en HTTPS.

Consideraciones adicionales

  • Depuración: Es recomendable activar la opción option httplog en los frontend y option tcplog en los backend durante la fase de pruebas para facilitar el diagnóstico de problemas.
  • Seguridad: Si está utilizando Cloudflare, asegúrese de habilitar su funcionalidad SSL/TLS y limitar las conexiones al servidor de origen a través de su rango de IP permitido.

Esta configuración permite a HAProxy operar de manera eficiente y compatible detrás de Cloudflare, minimizando posibles problemas y optimizando la entrega de contenido.