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
- 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 losfrontend
no es compatible con Cloudflare, ya que este protocolo espera encabezados de proxy adicionales que Cloudflare no envía.
- Configuración del Backend:
- El uso de
send-proxy-v2
en losbackend
genera incompatibilidades con servidores Apache. Por este motivo, en el archivo configurado, se utilizasend-proxy
en lugar desend-proxy-v2
.
- El uso de
- Optimizaciones de rendimiento:
- Se han definido
timeouts
adecuados para garantizar una conexión rápida y estable sin comprometer la experiencia del usuario final.
- Se han definido
- Soporte para múltiples dominios:
- La configuración está preparada para manejar diferentes dominios y subdominios mediante reglas de
hdr(host)
en HTTP yreq.ssl_sni
en HTTPS.
- La configuración está preparada para manejar diferentes dominios y subdominios mediante reglas de
Consideraciones adicionales
- Depuración: Es recomendable activar la opción
option httplog
en losfrontend
yoption tcplog
en losbackend
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.