# Configuración de HAProxy detrás de Cloudflare

- Link: https://binariocero.com/linux/configuracion-de-haproxy-detras-de-cloudflare
- Published: 2025-01-09T16:23:13+01:00
- Author: Juan José Fernández Durán

![Loading](https://binariocero.com/wp-content/plugins/page-views-count/ajax-loader-
2x.gif)

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

    ```wp-block-code
    # 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:**
 2.  * 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.
 3. **Configuración del Backend:**
 4.  * 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`.
 5. **Optimizaciones de rendimiento:**
 6.  * Se han definido `timeouts` adecuados para garantizar una conexión rápida y estable
       sin comprometer la experiencia del usuario final.
 7. **Soporte para múltiples dominios:**
 8.  * 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.
