Cómo configurar HAProxy para manejar tráfico HTTP en el puerto 80 y tráfico TCP (usualmente HTTPS) en el puerto 443

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

Paso 1: Instalación de HAProxy

En un sistema basado en Debian/Ubuntu, puedes instalar HAProxy con:

sudo apt update
sudo apt install haproxy -y

En un sistema basado en Red Hat/CentOS, puedes instalar HAProxy con:

sudo yum install haproxy -y

Paso 2: Configuración básica de HAProxy

El archivo principal de configuración de HAProxy se encuentra en /etc/haproxy/haproxy.cfg. A continuación, se muestra un archivo de configuración que maneja tanto HTTP como TCP en el puerto 443.

global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon

defaults
log global
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
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

# Configuración de balanceo HTTP
frontend http_front
bind *:80
mode http
default_backend http_back

backend http_back
mode http
balance roundrobin
server webserver1 192.168.1.10:80 check
server webserver2 192.168.1.11:80 check

# Configuración de balanceo TCP (HTTPS)
frontend tcp_front
bind *:443
mode tcp
default_backend tcp_back

backend tcp_back
mode tcp
balance roundrobin
server https_server1 192.168.1.20:443 check
server https_server2 192.168.1.21:443 check

# Configuración de estadísticas
listen stats
bind *:8080
mode http
stats enable
stats uri /stats
stats auth admin:password

Paso 3: Explicación del archivo de configuración

  1. global: Configuración global de HAProxy, incluyendo los registros y opciones de usuario/grupo.
  2. defaults: Configuración predeterminada para los frontend y backend, incluyendo los tiempos de espera y archivos de error personalizados.
  3. frontend http_front: Configura un frontend para manejar tráfico HTTP en el puerto 80.
  4. backend http_back: Define un backend para balancear la carga HTTP entre dos servidores web.
  5. frontend tcp_front: Configura un frontend para manejar tráfico TCP en el puerto 443 (usualmente usado para HTTPS).
  6. backend tcp_back: Define un backend para balancear la carga TCP entre dos servidores HTTPS.
  7. listen stats: Configura una interfaz de estadísticas accesible en el puerto 8080.

Paso 4: Habilitar y reiniciar HAProxy

Habilita HAProxy para que inicie en el arranque y reinícialo para aplicar los cambios:

sudo systemctl enable haproxy
sudo systemctl restart haproxy

Paso 5: Verificación de la configuración

Verifica que HAProxy esté funcionando correctamente:

sudo systemctl status haproxy

Puedes acceder a la interfaz de estadísticas en http://<tu_ip>:8080/stats con las credenciales admin:password.

Paso 6: Pruebas

  1. HTTP: Asegúrate de que tu navegador o una herramienta como curl pueda acceder a tu servicio HTTP a través de HAProxy.

    curl http://<tu_ip>
  2. TCP (HTTPS): Prueba la conexión a tu servicio HTTPS, por ejemplo, usando curl con la opción --insecure si no tienes un certificado válido:

    curl -k https://<tu_ip>

Paso 7: Archivos de configuración de ejemplo

Guarda el archivo de configuración en /etc/haproxy/haproxy.cfg:

# /etc/haproxy/haproxy.cfg

global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon

defaults
log global
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
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_front
bind *:80
mode http
default_backend http_back

backend http_back
mode http
balance roundrobin
server webserver1 192.168.1.10:80 check
server webserver2 192.168.1.11:80 check

frontend tcp_front
bind *:443
mode tcp
default_backend tcp_back

backend tcp_back
mode tcp
balance roundrobin
server https_server1 192.168.1.20:443 check
server https_server2 192.168.1.21:443 check

listen stats
bind *:8080
mode http
stats enable
stats uri /stats
stats auth admin:password

Siguiendo estos pasos, habrás configurado un HAProxy para balancear tráfico HTTP y TCP (HTTPS) de manera efectiva.