HAProxy (High Availability Proxy) es un servidor proxy y balanceador de carga de código abierto que se utiliza para distribuir el tráfico de red de manera eficiente y confiable entre múltiples servidores backend. HAProxy se destaca por su capacidad para proporcionar alta disponibilidad, escalabilidad y rendimiento, siendo especialmente útil en entornos web donde se requiere distribución de carga entre servidores backend. A continuación, se presentan algunas de las caracterÃsticas clave de HAProxy:
Balanceo de Carga: HAProxy distribuye el tráfico de red entrante entre múltiples servidores backend para mejorar el rendimiento y la escalabilidad de las aplicaciones.
Alta Disponibilidad: HAProxy se puede configurar para verificar la salud de los servidores backend y redirigir el tráfico a servidores saludables en caso de que un servidor falle.
Proxy y Reverse Proxy: HAProxy puede actuar como un servidor proxy para servidores backend o como un reverse proxy para servidores frontend, proporcionando una capa de seguridad y optimización.
Control de Sesiones: HAProxy puede realizar un balanceo de carga basado en sesiones y mantener la persistencia de las sesiones para ciertos tipos de aplicaciones.
Protocolos Soportados: HAProxy admite varios protocolos, incluidos HTTP, HTTPS, TCP y UDP.
Monitoreo de Servidores: HAProxy realiza verificaciones periódicas de salud en los servidores backend y ajusta el balanceo de carga en función de sus estados.
Configuración Dinámica: La configuración de HAProxy se puede ajustar dinámicamente sin necesidad de reiniciar el servicio, lo que permite cambios en tiempo real.
Redirección y Reescritura de URL: HAProxy puede redirigir y reescribir las URL según las necesidades de la aplicación.
Autenticación y Cifrado SSL: HAProxy puede gestionar la autenticación y la encriptación SSL/TLS para conexiones seguras.
Filtrado y Bloqueo: HAProxy puede realizar filtrado y bloqueo de solicitudes basado en reglas configuradas.
Herramientas de Monitorización y EstadÃsticas: HAProxy proporciona herramientas para supervisar el rendimiento y las estadÃsticas del servidor, como HAProxy Stats.
Algoritmos de Balanceo: HAProxy ofrece varios algoritmos de balanceo, como Round-Robin, Balanceo Ponderado, Balanceo Basado en IP, entre otros.
HAProxy es ampliamente utilizado para implementar arquitecturas de alta disponibilidad, escalabilidad y distribución de carga en aplicaciones web y servicios en lÃnea. Su flexibilidad y rendimiento lo convierten en una solución popular para administradores de sistemas y equipos de infraestructura.
Aquà tienes algunos ejemplos de configuración y casos de uso comunes de HAProxy:
Balanceo de Carga HTTP:
Supongamos que tienes tres servidores web backend (192.168.1.10, 192.168.1.11, 192.168.1.12) y deseas equilibrar la carga entre ellos:
frontend http_frontend
bind *:80
mode http
default_backend http_backend
backend http_backend
mode http
balance roundrobin
server server1 192.168.1.10:80
server server2 192.168.1.11:80
server server3 192.168.1.12:80
Balanceo de Carga HTTPS con SSL Passthrough:
Si deseas equilibrar la carga para conexiones SSL sin terminación en HAProxy:
frontend https_frontend
bind *:443
mode tcp
tcp-request inspect-delay 5s
tcp-request content accept if { req_ssl_hello_type 1 }
use_backend https_backend if { req_ssl_sni -i example.com }
backend https_backend
mode tcp
balance roundrobin
server server1 192.168.1.10:443
server server2 192.168.1.11:443
Redirección HTTP a HTTPS:
Puedes configurar HAProxy para redirigir las solicitudes HTTP a HTTPS:
frontend http_to_https
bind *:80
mode http
redirect scheme https code 301 if !{ ssl_fc }
Alta Disponibilidad:
Configura HAProxy para verificar la salud de los servidores y redirigir el tráfico a los servidores saludables:
frontend http_frontend
bind *:80
mode http
default_backend http_backend
backend http_backend
mode http
balance roundrobin
option httpchk GET /health-check
server server1 192.168.1.10:80 check
server server2 192.168.1.11:80 check
Persistencia de Sesión:
Si deseas mantener la persistencia de sesión para ciertos tipos de aplicaciones:
frontend http_frontend
bind *:80
mode http
default_backend http_backend
backend http_backend
mode http
balance roundrobin
cookie SERVERID insert indirect nocache
server server1 192.168.1.10:80 check cookie server1
server server2 192.168.1.11:80 check cookie server2
Balanceo de Carga con Peso:
Puedes ajustar el peso de cada servidor backend para lograr un balanceo de carga proporcional:
backend http_backend
mode http
balance roundrobin
server server1 192.168.1.10:80 weight 3
server server2 192.168.1.11:80 weight 2
server server3 192.168.1.12:80 weight 1
Balanceo Basado en IP:
Si deseas que un cliente especÃfico siempre sea dirigido al mismo servidor backend:
backend http_backend
mode http
balance source
server server1 192.168.1.10:80
server server2 192.168.1.11:80
Control de Acceso por Dirección IP:
Puedes limitar el acceso a ciertos servicios basado en la dirección IP:
frontend http_frontend
bind *:80
mode http
acl allowed_ips src 192.168.1.0/24
http_access allow allowed_ips
default_backend http_backend
Redirección de URL:
Puedes configurar redirecciones permanentes o temporales de URL:
frontend http_frontend
bind *:80
mode http
redirect location https://www.example.com code 301 if { hdr(host) -i example.com }
SSL Passthrough con Redirección:
Si deseas redirigir el tráfico SSL a otro puerto:
frontend https_frontend
bind *:443
mode tcp
redirect scheme https if !{ ssl_fc }
default_backend https_backend
backend https_backend
mode tcp
server server1 192.168.1.10:8443 check
Reglas de Autenticación de Cliente:
Si deseas autenticar a los clientes con certificados SSL:
frontend https_frontend
bind *:443 ssl crt /etc/ssl/certs/example.pem
mode http
acl cliente_autenticado ssl_c_used
http_request deny if !cliente_autenticado
default_backend https_backend
Detección y Bloqueo de Botnets:
Puedes usar listas negras para bloquear direcciones IP conocidas de botnets:
acl botnet_ips src -f /etc/haproxy/botnet-ips.lst
http_request deny if botnet_ips
Protección contra Ataques DDoS:
Configura HAProxy para limitar las conexiones de un cliente:
frontend http_frontend
bind *:80
mode http
stick-table type ip size 1m expire 5m store conn_rate(10s)
tcp-request connection track-sc1 src table bot_limit
acl conn_rate_abuse sc1_conn_rate ge 100
tcp-request connection reject if conn_rate_abuse
default_backend http_backend
Estos ejemplos más avanzados de configuración de HAProxy te proporcionan
una visión más profunda de las capacidades de esta herramienta.
Asegúrate de ajustar y personalizar estas configuraciones según tus
necesidades y los requerimientos de tu infraestructura. Siempre consulta
la documentación oficial de HAProxy y otros recursos en lÃnea para
obtener detalles más especÃficos y avanzados sobre su configuración y
uso.