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
- global: Configuración global de HAProxy, incluyendo los registros y opciones de usuario/grupo.
- defaults: Configuración predeterminada para los frontend y backend, incluyendo los tiempos de espera y archivos de error personalizados.
- frontend http_front: Configura un frontend para manejar tráfico HTTP en el puerto 80.
- backend http_back: Define un backend para balancear la carga HTTP entre dos servidores web.
- frontend tcp_front: Configura un frontend para manejar tráfico TCP en el puerto 443 (usualmente usado para HTTPS).
- backend tcp_back: Define un backend para balancear la carga TCP entre dos servidores HTTPS.
- 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
- 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>
- 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.