Este archivo de configuración de HAProxy actúa como un proxy inverso que dirige el tráfico entrante a diferentes backends (servidores de aplicaciones) en función del dominio solicitado. Esta configuración está optimizada para un entorno multi-dominio y multi-backend, donde se gestiona tanto tráfico HTTP como HTTPS (puertos 80 y 443). Se omiten estadísticas y opciones innecesarias, manteniendo solo lo esencial.
Secciones principales del archivo de configuración de HAProxy
La configuración de HAProxy se organiza en varias secciones que facilitan su configuración modular:
- Sección
global
: Define parámetros globales que afectan a toda la instancia de HAProxy. - Sección
defaults
: Configura parámetros predeterminados para simplificar la definición de otras secciones. - Sección
frontend
: Define las entradas de tráfico, es decir, las interfaces y puertos que HAProxy escucha. - Sección
backend
: Define los servidores a los que HAProxy envía el tráfico en función de las reglas configuradas en elfrontend
.
Explicación de cada sección del archivo
1. Sección global
La sección global
contiene configuraciones de nivel general. Aquí se define cómo HAProxy maneja el registro, los permisos y la ubicación de su ejecución. Estas opciones son:
log /dev/log local0
ylog /dev/log local1 notice
: Define el registro de logs en dos niveles.chroot /var/lib/haproxy
: Cambia el directorio raíz por seguridad.user haproxy
ygroup haproxy
: Define el usuario y grupo bajo los cuales se ejecuta HAProxy.daemon
: Configura HAProxy para que se ejecute en segundo plano.maxconn 8192
: Limita el número máximo de conexiones simultáneas para gestionar recursos.
2. Sección defaults
La sección defaults
configura parámetros comunes para las demás secciones y evita redundancia en la configuración:
log global
: Define que use la configuración de logs de la secciónglobal
.mode http
: Establece el modo HTTP para la mayoría de las opciones.option httplog
yoption dontlognull
: Controlan el tipo de registro de solicitudes.timeout
: Define varios tiempos de espera:timeout http-request 60s
: Tiempo de espera para la solicitud HTTP.timeout connect 600s
: Tiempo de espera al conectarse al backend.timeout client 600s
ytimeout server 600s
: Tiempos de espera para el cliente y el servidor.
errorfile
: Define archivos personalizados de error para códigos HTTP comunes, ubicados en/etc/haproxy/errors
.
3. Sección frontend
La sección frontend
configura las interfaces que HAProxy escucha y redirige el tráfico según el dominio o el SNI (Server Name Indication):
Configuración de HTTP (puerto 80)
bind *:80
: Escucha en todas las interfaces en el puerto 80.mode http
: Activa el modo HTTP.option forwardfor
: Permite reenviar la IP original del cliente.use_backend
: Redirige el tráfico a los diferentes backends según el encabezadoHost
.
Configuración de HTTPS (puerto 443)
bind *:443
: Escucha en el puerto 443.mode tcp
: Se usa el modo TCP para el tráfico cifrado.tcp-request inspect-delay 3s
: Define un retardo para inspeccionar la conexión SSL.tcp-request content accept if { req_ssl_hello_type 1 }
: Inspecciona el tipo de conexión SSL.use_backend
: Redirige el tráfico al backend correspondiente usando SNI para determinar el dominio.
4. Sección backend
La sección backend
configura los servidores a los que se redirige el tráfico entrante de acuerdo con el dominio. Cada backend representa un servicio distinto y permite gestionar tanto tráfico HTTP como HTTPS:
mode http
omode tcp
: Define el tipo de tráfico para cada backend.server
: Define el nombre del servidor, la IP y el puerto a donde se enviará el tráfico.
En este archivo de ejemplo, los dominios son miweb1.com
, miweb2.com
, y miweb3.com
, que se redirigen a diferentes servidores backend.
Archivo de Configuración de HAProxy
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
user haproxy
group haproxy
daemon
maxconn 8192
defaults
log global
mode http
option httplog
option dontlognull
timeout http-request 60s
timeout connect 600s
timeout client 600s
timeout server 600s
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 www80_front
bind *:80
mode http
option httplog
option forwardfor
use_backend miweb1_80 if { hdr(host) -i miweb1.com }
use_backend miweb2_80 if { hdr(host) -i miweb2.com }
use_backend miweb3_80 if { hdr(host) -i miweb3.com }
frontend www443_front
mode tcp
option tcplog
bind *:443
tcp-request inspect-delay 3s
tcp-request content accept if { req_ssl_hello_type 1 }
use_backend miweb1_443 if { req.ssl_sni -i miweb1.com }
use_backend miweb2_443 if { req.ssl_sni -i miweb2.com }
use_backend miweb3_443 if { req.ssl_sni -i miweb3.com }
backend miweb1_80
mode http
server server1_80 192.168.50.10:80 send-proxy check
backend miweb1_443
mode tcp
server server1_443 192.168.50.10:443 send-proxy check
backend miweb2_80
mode http
server server2_80 192.168.50.11:80 send-proxy check
backend miweb2_443
mode tcp
server server2_443 192.168.50.11:443 send-proxy check
backend miweb3_80
mode http
server server3_80 192.168.50.12:80 send-proxy check
backend miweb3_443
mode tcp
server server3_443 192.168.50.12:443 send-proxy check
Este archivo está diseñado para que HAProxy funcione como proxy inverso, distribuyendo el tráfico en función del dominio solicitado. En este caso, cada dominio es gestionado por un backend diferente, lo que permite un control detallado sobre el tráfico de cada dominio y protocolo.