Qué es HAProxy y cómo distribuye el tráfico
Autor: Redacción Domeny.ForSale Publicado
En pocas palabras: HAProxy es un software que recibe tráfico de red y lo reenvía a los servidores seleccionados que ejecutan la aplicación. Actúa como proxy inverso y balanceador de carga: intermedia en las conexiones y distribuye el tráfico entre las instancias del servicio. Ayuda a gestionar una carga mayor y a evitar los servidores que fallan, pero instalar HAProxy no garantiza por sí solo una disponibilidad ininterrumpida.
Cómo funciona HAProxy entre el usuario y la aplicación
Un proxy inverso, o reverse proxy, recibe conexiones en nombre de los servidores de la aplicación. El usuario se conecta a la dirección del servicio, detrás de la cual se encuentra HAProxy, en lugar de conectarse directamente a un servidor concreto del backend. HAProxy elige el destino y le reenvía el tráfico; la respuesta vuelve a través de esa misma capa intermediaria.
El balanceo de carga, o load balancing, consiste en distribuir el tráfico entre los servidores disponibles. No tiene por qué ser un reparto perfectamente equitativo: una máquina más potente puede recibir más tareas, mientras que un servidor en mantenimiento puede dejar de recibir solicitudes nuevas.
En la configuración de HAProxy hay dos conceptos importantes. Frontend define dónde recibe las conexiones el programa, por ejemplo, en el puerto 443 para HTTPS. Backend describe el grupo de servidores de destino y las reglas para seleccionarlos. Un frontend puede dirigir el tráfico a distintos backends según el dominio o la ruta de la dirección.
Compatibilidad con TCP, HTTP y cifrado
HAProxy puede trabajar en distintos niveles de comunicación. En modo TCP reenvía las conexiones sin tomar decisiones basadas en el contenido de las solicitudes HTTP. Esta solución también resulta útil para servicios que no sean sitios web, siempre que utilicen TCP.
En modo HTTP, HAProxy interpreta elementos de la solicitud, como el nombre del host, la ruta y las cabeceras. Así, puede dirigir el tráfico de /api a los servidores API y las demás solicitudes a la aplicación que muestra el sitio web. Estas reglas suelen expresarse mediante ACL, es decir, condiciones que permiten determinar qué reglas aplicar al tráfico.
Con HTTPS, es importante dónde termina TLS, el protocolo que protege la conexión:
- Terminación de TLS en HAProxy: el programa gestiona el certificado y descifra el tráfico, lo que le permite analizar HTTP. La conexión con el backend puede volver a cifrarse.
- Reenvío de la conexión cifrada: el servidor de destino gestiona TLS. En este caso, HAProxy no ve las rutas ni las cabeceras HTTP, por lo que no puede utilizarlas para decidir cómo dirigir el tráfico.
Terminar TLS en HAProxy no implica que la conexión con la aplicación quede cifrada automáticamente. Ese tramo debe configurarse por separado, incluida la verificación del certificado del servidor de destino.
Cómo ayuda la distribución del tráfico ante un fallo
Imagina una tienda en línea que funciona en tres servidores de aplicaciones. HAProxy recibe las solicitudes de los clientes y las distribuye mediante round robin, es decir, por turnos entre los servidores disponibles. Una alternativa es least connections, que da preferencia al servidor con menos conexiones activas; la elección del método depende de las características del tráfico.
HAProxy puede realizar health checks, comprobaciones periódicas de la disponibilidad de los servidores del backend. Si uno de ellos deja de superar las pruebas, el programa puede dejar de asignarle tráfico nuevo y mantener el servicio en las demás máquinas. Sin embargo, las conexiones activas con el servidor averiado pueden interrumpirse.
Comprobar únicamente que un puerto está abierto no confirma que la tienda pueda procesar un pedido. A menudo resulta más adecuado realizar una prueba HTTP de un punto de comprobación específico de la aplicación que indique si está lista para atender solicitudes. El alcance de la prueba debe elegirse con cuidado: una prueba demasiado superficial pasará por alto un fallo, mientras que una demasiado restrictiva puede excluir innecesariamente instancias que funcionan correctamente.
Distribuir el tráfico también exige una arquitectura adecuada de la aplicación. Si el carrito del cliente solo se guarda en la memoria de un servidor, una solicitud posterior enviada a otra máquina podría no recuperar su contenido. Un almacenamiento compartido de sesiones ayuda a resolverlo; vincular al cliente con un servidor, lo que se conoce como sticky sessions, no protege los datos de la sesión si esa máquina falla.
En qué se diferencia HAProxy de un servidor web
La función principal de HAProxy es intermediar en la comunicación y gestionar el tráfico, no servir los archivos del sitio ni ejecutar el código de la aplicación como lo haría un servidor web. En la práctica, se sitúa delante de los servidores web o de los procesos de la aplicación que generan las respuestas. Tampoco sustituye a la base de datos ni a su mecanismo de replicación.
NGINX y Apache HTTP Server también pueden actuar como proxy inverso y, al mismo tiempo, como servidor web. Por tanto, la elección no se reduce a determinar qué herramienta es mejor en general. HAProxy es una opción razonable cuando se necesita una capa independiente para balancear el tráfico TCP o HTTP, comprobar el estado de los servidores del backend y aplicar reglas para dirigir las conexiones.
Para un único sitio pequeño, el servidor web existente o el balanceador de carga del proveedor de nube puede ser suficiente. Añadir HAProxy supone incorporar otro componente que requiere actualizaciones, supervisión y mantenimiento de su configuración.
Qué comprobar antes de la implementación
Una única instancia de HAProxy puede convertirse en un punto único de fallo: si deja de estar disponible, los usuarios perderán el acceso incluso a los servidores de aplicaciones que sigan funcionando. Un sistema que requiera alta disponibilidad necesita también instancias redundantes del proxy y un mecanismo para conmutar el tráfico entre ellas.
Antes de ponerlo en producción, comprueba cuatro aspectos:
- Pruebas del backend: ¿detectan si la aplicación no está lista para atender solicitudes o solo comprueban que el puerto funciona?
- Límites y tiempos de espera: ¿cuántas conexiones aceptará el sistema y cuánto tiempo esperará una respuesta?
- Dirección del cliente: ¿cómo recibirá la aplicación la dirección IP real y en qué cabeceras del proxy puede confiar?
- Observabilidad: ¿los registros y las métricas permiten identificar errores, retrasos y sobrecargas?
Confirma las funciones disponibles y la sintaxis de configuración en la documentación oficial de la versión de HAProxy que utilices. Realiza la primera prueba con dos instancias de la aplicación: desactiva una mientras circula tráfico controlado y comprueba tanto la reacción del proxy como el comportamiento de la sesión del usuario.
Consulta también: ¿Qué es 2FA?
