¿Por qué alojar HAProxy en un VPS dedicado?
HAProxy (High Availability Proxy) es un software de código abierto de reparto de carga y proxy TCP/HTTP, reconocido por su rendimiento en producción. Alojarlo en un VPS dedicado le permite centralizar la distribución del tráfico entre sus servidores de aplicaciones, garantizar la continuidad del servicio ante el fallo de un nodo y gestionar con precisión las reglas de enrutamiento sin costos de licencia. En un solo VPS de 2 vCPU / 2 GB RAM, HAProxy maneja sin esfuerzo miles de conexiones simultáneas.
Lo que puede hacer con HAProxy
- Repartir el tráfico HTTP/HTTPS entre varios servidores de aplicaciones con algoritmos configurables (roundrobin, leastconn, source…)
- Montar un reverse proxy para exponer varios servicios internos detrás de una única dirección IP pública
- Vigilar la salud de sus backends con health checks automáticos y retirar un servidor defectuoso sin interrumpir el servicio
- Terminar las conexiones SSL/TLS en el frontal (offloading) para liberar del cifrado a sus servidores de aplicaciones
- Enrutar el tráfico por dominio o ruta con ACL (host_hdr, path_beg) en un único puerto 443
- Consultar las estadísticas de tráfico en tiempo real desde la interfaz web integrada (stats uri /stats)
Instalar y configurar HAProxy en su VPS ServOrbit
Pedir un VPS Cloud ServOrbit e iniciar la instalación
Vaya a /vps-cloud y elija una oferta con al menos 2 vCPU y 2 GB de RAM. Desde el panel de su VPS, abra el Marketplace, busque «HAProxy» y haga clic en Instalar. El aprovisionamiento automático de ServOrbit instala HAProxy vía apt y activa el servicio — no hace falta conexión SSH en esta etapa. También puede instalarlo manualmente:
sudo apt update && sudo apt install -y haproxyEntender la estructura de haproxy.cfg
El archivo de configuración principal está en
/etc/haproxy/haproxy.cfg. Se organiza en cuatro secciones:global(proceso, logs, límites del sistema),defaults(timeouts y modos heredados),frontend(puertos de escucha, reglas ACL) ybackend(servidores destino, algoritmo, health checks). Edítelo con:sudo nano /etc/haproxy/haproxy.cfgConfigurar un frontend HTTP/HTTPS y un backend completos
Aquí tiene una configuración completa para dos servidores de aplicaciones con terminación SSL:
global log /dev/log local0 maxconn 50000 user haproxy group haproxy defaults log global mode http option httplog timeout connect 5s timeout client 30s timeout server 30s frontend http_front bind *:80 redirect scheme https code 301 frontend https_front bind *:443 ssl crt /etc/haproxy/certs/bundle.pem default_backend app_servers backend app_servers balance roundrobin option httpchk GET /health server app1 192.168.1.10:3000 check weight 1 inter 2s fall 3 rise 2 server app2 192.168.1.11:3000 check weight 2 inter 2s fall 3 rise 2El parámetro
weightenvía proporcionalmente más tráfico hacia app2. La directivaoption httpchk GET /healthenvía una petición HTTP al endpoint/healthde cada backend para verificar que responde correctamente.Configurar ACL para enrutamiento por dominio y ruta
Las ACL permiten enrutar el tráfico a distintos backends según el nombre de dominio o la ruta de la petición. Añada en su frontend:
frontend https_front bind *:443 ssl crt /etc/haproxy/certs/bundle.pem acl host_api hdr(host) -i api.misite.com acl host_app hdr(host) -i app.misite.com acl path_admin path_beg /admin use_backend api_servers if host_api use_backend admin_servers if path_admin use_backend app_servers if host_app default_backend app_serversLa directiva
hdr(host)inspecciona la cabecera HTTP Host para identificar el dominio.path_beg /adminenruta todas las peticiones cuya ruta empiece por/adminhacia un backend dedicado.Terminar SSL/TLS con Let's Encrypt y crear el bundle PEM
HAProxy espera un archivo
.pemque contenga el certificado, la cadena intermedia y la clave privada en ese orden. Tras obtener su certificado con Certbot, cree el bundle:sudo mkdir -p /etc/haproxy/certs sudo cat /etc/letsencrypt/live/misite.com/fullchain.pem \ /etc/letsencrypt/live/misite.com/privkey.pem \ | sudo tee /etc/haproxy/certs/bundle.pem sudo chmod 600 /etc/haproxy/certs/bundle.pemPara automatizar la renovación, añada un post-hook en
/etc/letsencrypt/renewal-hooks/post/haproxy.shque reconstruya el bundle y ejecutesystemctl reload haproxy.Activar la página de estadísticas de HAProxy
La página de estadísticas integrada ofrece una vista en tiempo real del estado de cada frontend, backend y servidor. Añada un bloque frontend dedicado:
frontend stats bind *:8404 stats enable stats uri /stats stats refresh 10s stats auth admin:ContraseñaSecreta stats hide-versionAcceda a
http://su-ip:8404/stats. El campostats authprotege la página con autenticación HTTP Basic.Validar la configuración y recargar sin interrupción
Antes de cualquier recarga, valide la sintaxis del archivo de configuración:
sudo haproxy -c -f /etc/haproxy/haproxy.cfgSi el comando muestra
Configuration file is valid, recargue HAProxy sin cortar las conexiones activas:sudo systemctl reload haproxyVerifique que el servicio está activo:
sudo systemctl status haproxy. El comandoreload(norestart) garantiza una recarga sin cortes: las conexiones establecidas terminan normalmente antes de que los workers antiguos se detengan.Revisar los logs y monitorizar de forma continua
HAProxy envía sus logs a syslog. Consúltelos en tiempo real:
sudo journalctl -u haproxy -fCada línea muestra el frontend, el backend, el servidor seleccionado, el código HTTP y los tiempos de conexión — imprescindible para diagnosticar un problema de enrutamiento o un backend lento.
Health checks avanzados: detectar backends defectuosos
La directiva check en cada línea server activa los health checks. Por defecto, HAProxy abre una conexión TCP para verificar que el puerto responde. Para ir más lejos, option httpchk GET /health envía una petición HTTP real y espera un código 2xx. Los parámetros inter 2s fall 3 rise 2 significan: comprobar cada 2 segundos, retirar el servidor tras 3 fallos consecutivos, reintegrarlo tras 2 éxitos. Añada option redispatch para que HAProxy reintente las peticiones fallidas en otro servidor del pool.
Algoritmos de balanceo de carga: ¿cuál elegir?
Desplace la tabla
| Algoritmo | Comportamiento | Ideal para |
|---|---|---|
| roundrobin | Distribuye las peticiones por turnos entre los servidores. Soporta el parámetro weight. | Backends con capacidades equivalentes |
| leastconn | Envía cada nueva petición al servidor con menos conexiones activas. | Conexiones largas (WebSocket, base de datos) |
| source | Hace hash de la IP fuente del cliente para persistencia de sesión sin cookie. | Sesiones que no pueden compartirse entre backends |
| uri | Hace hash del URI de la petición para enrutar siempre al mismo backend. | Cachés de aplicación donde importa la localidad de los datos |
Solución de problemas: errores comunes y soluciones
Estos son los cinco errores más frecuentes al configurar o recargar HAProxy, con su causa y los pasos para resolverlos.
Errores frecuentes y cómo resolverlos
[ALERT] Starting frontend http_front: cannot bind socket [0.0.0.0:80]— El puerto 80 ya está ocupado por otro proceso (nginx, apache2). Identifíquelo consudo ss -tlnp | grep ':80', detenga el servicio en conflicto (sudo systemctl stop nginx) y luego recargue HAProxy.[WARNING] Server app_servers/app1 is DOWN, reason: Layer4 connection problem— HAProxy no puede alcanzar la dirección IP o el puerto del backend. Compruebe que el servidor de aplicaciones está activo, que su cortafuegos permite conexiones desde la IP del VPS HAProxy y que la dirección enhaproxy.cfges correcta.[ALERT] parsing [/etc/haproxy/haproxy.cfg:42] : unknown keyword 'serveur'— Error de sintaxis en el archivo de configuración. El comandohaproxy -c -f /etc/haproxy/haproxy.cfgindica el número de línea exacto. Las palabras clave de HAProxy están en inglés:server,frontend,backend. Compruebe también la indentación (HAProxy solo acepta espacios).[ALERT] ssl library has no cert for frontend https_fronto certificate expired — El archivo bundle.pem está ausente, vacío o contiene un certificado caducado. Reconstruya el bundle desde los archivos Let's Encrypt actualizados (fullchain.pem+privkey.pem) y luego recargue.- La página de estadísticas devuelve HTTP 403 — La directiva
stats authestá configurada pero las credenciales no se envían, o la IP origen no está en una lista blancastats allow-from. Compruebe la URL (/statspor defecto), las credenciales y añada temporalmentestats allow-from 0.0.0.0/0para diagnosticar.
Consejo: tras cada modificación de haproxy.cfg, ejecute siempre sudo haproxy -c -f /etc/haproxy/haproxy.cfg antes de systemctl reload. Esta validación de sintaxis tarda menos de un segundo y evita una interrupción del servicio si el archivo contiene un error.
Para ir más lejos
La documentación oficial de HAProxy detalla todas las directivas, las opciones TCP avanzadas, el soporte QUIC/HTTP3 (HAProxy 2.6+) y la configuración de alta disponibilidad con Keepalived para conmutación de IP virtual entre dos instancias de HAProxy. Esta guía cubre la puesta en línea en un VPS ServOrbit; la documentación del editor sigue siendo la referencia para los ajustes finos.