Para crear HAProxy en un servidor Linux, instala HAProxy a través del paquete de tu distribución manager, defina un frontend en los puertos 80/443 y backends para sus servidores de aplicaciones en /etc/haproxy/haproxy.cfg, habilite las comprobaciones de estado, inicie y habilite el servicio con systemd, abra su firewall y luego pruebe el enrutamiento y SSL Terminación. Consulte la guía paso a paso a continuación.
Si estás buscando cómo crear HAProxy en un servidor Linux, esta guía te lleva a través de la instalación, configuración, SSL Terminación, sesiones persistentes, ACL y resolución de problemas. Tanto si usas Ubuntu, Debian o RHEL/CentOS/AlmaLinux, aprenderás una configuración lista para producción que escala el tráfico web de forma fiable y segura.
¿Qué es HAProxy y por qué usarlo?
HAProxy es un TCP/HTTP de código abierto y alto rendimiento. equilibrador de carga y proxy inverso. Distribuye el tráfico entre varios servidores backend, mejora el tiempo de actividad con comprobaciones de estado, admite sesiones persistentes, limitación de velocidad, SSLTerminación TLS, HTTP/2 y reglas de enrutamiento granular.

Es la opción predilecta para aplicaciones web, API y microservicios que necesitan escalabilidad y tolerancia a fallos.
Requisitos previos
- Un servidor Linux (Ubuntu/Debian o RHEL/CentOS/AlmaLinux) con acceso sudo.
- Nombre de dominio (recomendado) que apunte a la IP del servidor HAProxy.
- Al menos dos servidores de aplicaciones backend (por ejemplo, 10.0.0.10:80 y 10.0.0.11:80)
- Puertos abiertos: 80 (HTTP), 443 (HTTPS) en el equilibrador de carga
- Familiaridad básica con la línea de comandos
Paso a paso: Instalar HAProxy en Linux
Ubuntu / Debian
sudo apt update
sudo apt install -y haproxy
haproxy -v # verify versionRHEL/CentOS/AlmaLinux/Rocky
sudo dnf install -y haproxy
haproxy -v # verify versionLa instalación desde repositorios oficiales es suficiente para la mayoría de los casos. Para acceder a las funciones más recientes, considere HAProxy Enterprise o las compilaciones de la comunidad (PPA/código fuente), pero siga la política de actualizaciones de su organización.
Crear una configuración básica de HAProxy
Crearemos un archivo haproxy.cfg limpio con secciones de configuración global y predeterminada, un frontend HTTP y un grupo de backend con comprobaciones de estado. Reemplace las direcciones IP, los dominios y los puntos finales de estado según sea necesario.
sudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak
sudo nano /etc/haproxy/haproxy.cfgglobal
log /dev/log local0
log /dev/log local1 notice
user haproxy
group haproxy
daemon
maxconn 4096
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5s
timeout client 30s
timeout server 30s
retries 3
frontend http_in
bind *:80
option http-server-close
default_backend app_backend
backend app_backend
balance roundrobin
option httpchk GET /health
http-check expect status 200
server app1 10.0.0.10:80 check
server app2 10.0.0.11:80 checkEsta configuración distribuye las solicitudes HTTP entre dos servidores mediante round-robin y marca las instancias con problemas como "inactivas". Asegúrese de que su aplicación exponga un punto final /health ligero que devuelva HTTP 200.
Iniciar, habilitar y abrir el cortafuegos
# Validate config
sudo haproxy -c -f /etc/haproxy/haproxy.cfg
# Start and enable
sudo systemctl enable --now haproxy
# Ubuntu/Debian with UFW
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# RHEL/CentOS family with firewalld
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reloadVisita http://TU_DOMINIO o http://TU_IP_para_confirmar que el tráfico llega a tus servidores backend. Revisa los registros para verificar las solicitudes y el estado del sistema.
journalctl -u haproxy -fAgregar HTTPS: SSLTerminación TLS con Let's Encrypt
Terminar SSL en HAProxy para descargar el cifrado de sus servidores de aplicaciones. Obtendremos un certificado con Certbot, combinaremos el certificado y la clave en un PEM y configuraremos un 301 redirigir desde HTTP a HTTPS.
1) Obtén un certificado de Let's Encrypt.
Apunte el registro A de su dominio al servidor HAProxy. Detenga temporalmente HAProxy en el puerto 80 y, a continuación, ejecute Certbot en modo independiente.
sudo systemctl stop haproxy
sudo apt install -y certbot || sudo dnf install -y certbot
sudo certbot certonly --standalone -d example.com -d www.example.com
# Certificates will be under /etc/letsencrypt/live/example.com/2) Crea un paquete PEM para HAProxy.
sudo mkdir -p /etc/haproxy/certs
DOMAIN=example.com
sudo bash -c 'cat /etc/letsencrypt/live/'"$DOMAIN"'/fullchain.pem /etc/letsencrypt/live/'"$DOMAIN"'/privkey.pem > /etc/haproxy/certs/'"$DOMAIN"'.pem'
sudo chmod 600 /etc/haproxy/certs/"$DOMAIN".pem3) Actualizar haproxy.cfg para HTTPS y redireccionamiento
frontend http_in
bind *:80
http-request redirect scheme https code 301 unless { ssl_fc }
frontend https_in
bind *:443 ssl crt /etc/haproxy/certs/example.com.pem alpn h2,http/1.1
http-response set-header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
default_backend app_backend# Restart HAProxy
sudo systemctl start haproxy
sudo systemctl reload haproxyAutomatice la renovación de certificados con un script posterior a la renovación que reconstruye el archivo PEM y recarga HAProxy.
# /etc/letsencrypt/renewal-hooks/deploy/haproxy-renew.sh
#!/usr/bin/env bash
DOMAIN=example.com
cat /etc/letsencrypt/live/$DOMAIN/fullchain.pem /etc/letsencrypt/live/$DOMAIN/privkey.pem > /etc/haproxy/certs/$DOMAIN.pem
chmod 600 /etc/haproxy/certs/$DOMAIN.pem
systemctl reload haproxy
# Make executable
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/haproxy-renew.shFunciones de producción útiles (opcionales)
Sesiones persistentes (persistencia de la sesión)
Mantenga un cliente vinculado al mismo servidor (útil para aplicaciones con estado).
backend app_backend
balance roundrobin
cookie SRV insert indirect nocache
option httpchk GET /health
server app1 10.0.0.10:80 check cookie s1
server app2 10.0.0.11:80 check cookie s2Enrutamiento basado en ruta/host con ACL
frontend https_in
bind *:443 ssl crt /etc/haproxy/certs/example.com.pem
acl host_api hdr(host) -i api.example.com
acl path_admin path_beg -i /admin
use_backend api_backend if host_api
http-request deny if path_admin !{ src 192.168.1.0/24 }
default_backend app_backend
backend api_backend
balance leastconn
server api1 10.0.0.20:8080 check
server api2 10.0.0.21:8080 checkLimitación de velocidad y protección DDoS básica
frontend https_in
bind *:443 ssl crt /etc/haproxy/certs/example.com.pem
stick-table type ip size 100k expire 10m store http_req_rate(10s)
http-request track-sc0 src
http-request deny status 429 if { sc_http_req_rate(0) gt 100 }
default_backend app_backendEstadísticas y visibilidad de la salud
listen stats
bind :8404
stats enable
stats uri /stats
stats refresh 10s
stats auth admin:StrongPasswordHereVisite http://YOUR_DOMAIN:8404/stats para ver las conexiones, el estado del servidor y el estado general.
Pruebas y Verificación
- Conectividad: curl -I http://TU_DOMINIO y curl -I https://TU_DOMINIO
- Enrutamiento: Apague la aplicación 1 para confirmar la conmutación por error a la aplicación 2.
- Controles de salud: Consulta journalctl -u haproxy -f para ver si el servidor está ACTIVO/INACTIVO.
- SSL: Calificar con un SSL Escáner (objetivo A+) y confirme el encabezado HSTS.
- Actuación: ApacheBench, wrk o k6 en un entorno de prueba
Errores comunes y soluciones
- Puerto en uso: Otro servicio puede estar utilizando los puertos 80/443. Ejecute sudo ss -ltnp | grep -E ':80|:443' y detenga/desactive el conflicto.
- SELinux (basado en RHEL): Permita conexiones salientes a cualquier puerto con sudo setsebool -P haproxy_connect_any 1 o etiquete correctamente los puertos con semanage.
- Cortafuegos cerrado: Asegúrese de que ufw o firewalld permitan los servicios http/https.
- Resultado de mala salud: Haz que /health sea rápido, no autenticado y devuelva 200 OK.
- Visibilidad del registro: Si /var/log está vacío, utilice journalctl o habilite rsyslog para local0/local1 si lo desea.
Consejos para optimizar el rendimiento
- Ajusta el tamaño de maxconn (global y por frontend/backend) para que coincida con los recursos del servidor.
- Utilice leastconn para tiempos de solicitud desiguales; roundrobin para cargas de trabajo uniformes.
- Habilite HTTP/2 en los front-ends TLS con alpn h2,http/1.1 para una mejor multiplexación.
- Establece tiempos de espera realistas: Si es demasiado alto, se acumulan las conexiones; si es demasiado bajo, se producen caídas de clientes lentos.
- Descargue TLS en HAProxy y mantenga el tráfico de backend en una red privada.
¿Cuándo elegir HAProxy administrado? (Ahorre tiempo)
Si prefieres no hacerlo manage certificados, parches y conmutación por error, un managed equilibrador de carga o un completo manageUn VPS puede ayudar. En YouStableNuestros ingenieros pueden aprovisionar HAProxy en instancias VPS o en la nube optimizadas para el rendimiento, configurarlo SSL Automatiza y refuerza tu infraestructura para que puedas centrarte en tu aplicación, no en la infraestructura técnica.
Preguntas frecuentes
¿Cómo puedo instalar y configurar HAProxy en Ubuntu rápidamente?
Ejecuta `sudo apt update && sudo apt install -y haproxy`, luego edita `/etc/haproxy/haproxy.cfg` para agregar un frontend en el puerto 80 o 443 y un backend con tus servidores de aplicaciones. Valida con `haproxy -c -f /etc/haproxy/haproxy.cfg`, habilita con `systemctl enable –now haproxy` y abre los puertos del firewall.
¿Cuál es la diferencia entre un proxy inverso y un balanceador de carga en HAProxy?
Como proxy inverso, HAProxy se sitúa delante del origen de una aplicación y gestiona TLS, el almacenamiento en caché (mediante servidores backend) y el enrutamiento. Como balanceador de carga, distribuye el tráfico entre múltiples orígenes, aplicando algoritmos (roundrobin, leastconn), comprobaciones de estado y conmutación por error. HAProxy puede desempeñar ambas funciones simultáneamente.
¿Cómo habilito sesiones persistentes en HAProxy?
Agregue una inserción SRV de cookies en el backend y establezca una cookie única por servidor (cookie s1, cookie s2). Los navegadores enviarán la cookie de vuelta y HAProxy la enrutará al mismo servidor, mejorando la persistencia de la sesión para aplicaciones con estado como las antiguas. PHP o pilas de Java.
¿Puede HAProxy gestionar HTTPS con Let's Encrypt automáticamente?
Sí, utilice Certbot para obtener certificados y concatenar fullchain.pem + privkey.pem en un único archivo .pem para HAProxy. Añada un gancho de renovación para reconstruir el archivo PEM y recargar HAProxy después de que Certbot renueve. Esto proporciona una gestión prácticamente automática. SSL manageambiente.
¿Cómo puedo monitorizar el estado y el rendimiento de HAProxy?
Habilita la página de estadísticas integrada en un puerto independiente, envía los registros mediante journald/rsyslog e integra Prometheus/Grafana usando un exportador HAProxy. Monitorea las métricas clave: estado del servidor (activo/inactivo), tiempos de respuesta, tasas de solicitud, reintentos y errores para detectar problemas a tiempo.
