Ir al contenido
Proxy Types 8 min de lectura 798 vistas

HAProxy

Explore las capacidades de HAProxy para un potente balanceo de carga y proxy. Aprenda a distribuir el tráfico de manera eficiente, monitorear la salud del servidor y mejorar la fiabilidad de la aplicación.

HAProxy

HAProxy (High Availability Proxy) es un balanceador de carga TCP/HTTP de alto rendimiento y código abierto, y un servidor proxy que distribuye el tráfico de red entre múltiples servidores backend para maximizar el rendimiento, la fiabilidad y la capacidad del servidor. Opera tanto en la Capa 4 (TCP) como en la Capa 7 (HTTP) del modelo OSI, lo que permite una gestión precisa del tráfico, alta disponibilidad y una utilización eficiente de los recursos para aplicaciones y servicios.

HAProxy es reconocido por su velocidad, estabilidad y capacidad para manejar volúmenes de tráfico muy altos. Se implementa comúnmente delante de servidores web, servidores de aplicaciones y clústeres de bases de datos para asegurar una distribución uniforme de las solicitudes de los clientes, prevenir la sobrecarga del servidor y facilitar operaciones de mantenimiento sin interrupciones.

Balanceo de Carga con HAProxy

El balanceo de carga es el proceso de distribuir el tráfico de red entre un grupo de servidores backend, conocido como granja o clúster de servidores. HAProxy emplea varios algoritmos para determinar qué servidor recibe la siguiente solicitud, con el objetivo de optimizar el uso de recursos, maximizar el rendimiento, minimizar el tiempo de respuesta y evitar la sobrecarga de servidores individuales.

Los aspectos clave del balanceo de carga de HAProxy incluyen:

  • Selección de Algoritmo: HAProxy ofrece varios algoritmos para adaptarse a diferentes necesidades de la aplicación.
  • Comprobaciones de Salud del Servidor: Monitoreo continuo de la disponibilidad y capacidad de respuesta del servidor backend.
  • Ponderación de Servidores: Priorizar ciertos servidores para que reciban más tráfico.

Algoritmos de Balanceo de Carga

HAProxy proporciona una variedad de algoritmos configurados dentro de la sección backend:

  • roundrobin: Distribuye las solicitudes secuencialmente a cada servidor en el grupo backend. Algoritmo predeterminado.
  • leastconn: Dirige las nuevas conexiones al servidor con el menor número de conexiones activas. Óptimo para conexiones de larga duración.
  • source: Utiliza un hash de la dirección IP de origen para determinar el servidor. Asegura que un cliente se conecte consistentemente al mismo servidor, útil para aplicaciones con estado sin persistencia de sesión explícita.
  • uri: Hashea la parte izquierda de la URL (antes de la cadena de consulta) para seleccionar un servidor. Útil para proxies de caché.
  • hdr(<name>): Hashea el valor de un encabezado HTTP especificado.
  • random: Elige un servidor al azar.
backend web_servers
    balance roundrobin
    server web1 192.168.1.10:80 check
    server web2 192.168.1.11:80 check
    server web3 192.168.1.12:80 check

Proxying con HAProxy

El proxying implica un servidor intermediario que actúa en nombre de un cliente o servidor. HAProxy funciona como un proxy inverso, aceptando conexiones de clientes y reenviándolas a servidores backend, luego devolviendo las respuestas de los servidores a los clientes. Esta capa de abstracción proporciona beneficios de seguridad, rendimiento y operativos.

Proxying de Capa 4 (TCP)

En la Capa 4, HAProxy reenvía conexiones TCP sin procesar sin inspeccionar el contenido de la capa de aplicación. Esto es adecuado para servicios no HTTP, bases de datos o protocolos personalizados donde la inspección de contenido no es necesaria o deseada.

listen mysql_cluster
    bind *:3306
    mode tcp
    balance leastconn
    server db1 192.168.1.20:3306 check
    server db2 192.168.1.21:3306 check

Proxying de Capa 7 (HTTP)

En la Capa 7, HAProxy puede inspeccionar y manipular los encabezados de solicitud y respuesta HTTP, URLs y cookies. Esto permite características avanzadas como enrutamiento basado en contenido, terminación SSL, reescritura de URL y persistencia de sesión.

frontend http_frontend
    bind *:80
    mode http
    default_backend web_servers

Componentes de Configuración de HAProxy

La configuración de HAProxy reside típicamente en /etc/haproxy/haproxy.cfg y está estructurada en varias secciones.

Sección global

La sección global define parámetros a nivel de proceso, como el registro, la configuración de seguridad y los límites de rendimiento. Estos ajustes se aplican a toda la instancia de HAProxy.

global
    log /dev/log    local0 info
    maxconn 20000
    chroot /var/lib/haproxy
    pidfile /var/run/haproxy.pid
    user haproxy
    group haproxy
    daemon
    stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners

Sección defaults

La sección defaults especifica parámetros predeterminados para todas las secciones listen, frontend y backend que la siguen. Esto reduce la redundancia de la configuración.

defaults
    mode http
    log global
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms
    option httplog
    option dontlognull
    option http-server-close

Sección frontend

Un frontend define el punto de entrada público donde HAProxy escucha las conexiones de los clientes. Especifica la dirección IP, el puerto, el protocolo (mode) y las reglas para enrutar las solicitudes a backends específicos utilizando Listas de Control de Acceso (ACLs).

frontend http_in
    bind *:80
    mode http
    acl host_app1 hdr(host) -i app1.example.com
    acl host_app2 hdr(host) -i app2.example.com

    use_backend app1_servers if host_app1
    use_backend app2_servers if host_app2
    default_backend default_web_servers

Sección backend

Un backend define un grupo de servidores a los que HAProxy puede reenviar solicitudes. Incluye el algoritmo de balanceo de carga, los parámetros de comprobación de salud y las definiciones de servidores individuales.

backend app1_servers
    balance leastconn
    option httpchk GET /healthz
    server s1 10.0.0.10:8080 check inter 2000 fall 3 rise 2
    server s2 10.0.0.11:8080 check inter 2000 fall 3 rise 2 backup
  • check: Habilita las comprobaciones de salud para el servidor.
  • inter 2000: Comprueba cada 2000ms.
  • fall 3: Marca el servidor como inactivo después de 3 comprobaciones fallidas consecutivas.
  • rise 2: Marca el servidor como activo después de 2 comprobaciones exitosas consecutivas.
  • backup: El servidor solo se utilizará cuando todos los demás servidores no-backup estén inactivos.

Sección listen

Una sección listen combina las funcionalidades de un frontend y un backend en un solo bloque. Esto se usa a menudo para configuraciones más simples o para servicios como la página de estadísticas de HAProxy.

listen stats_page
    bind *:8080
    mode http
    stats enable
    stats uri /haproxy?stats
    stats realm HAProxy\ Statistics
    stats auth admin:securepassword
    stats refresh 5s

Listas de Control de Acceso (ACLs)

Las ACLs son potentes reglas condicionales utilizadas para hacer coincidir criterios específicos en las solicitudes de los clientes (por ejemplo, IP de origen, encabezado de host, ruta de URL, método HTTP). Permiten el enrutamiento dinámico, el cambio de contenido y el bloqueo.

frontend website_frontend
    bind *:443 ssl crt /etc/haproxy/certs/mydomain.pem

    # ACLs basadas en la ruta
    acl is_admin_area path_beg /admin
    acl is_api_v1   path_beg /api/v1

    # Enrutamiento basado en ACLs
    use_backend admin_backend if is_admin_area
    use_backend api_v1_backend if is_api_v1
    default_backend main_website_backend

Comprobaciones de Salud

HAProxy monitorea continuamente la salud de los servidores backend para asegurar que las solicitudes solo se envíen a instancias operativas. Si un servidor falla las comprobaciones de salud, HAProxy lo elimina temporalmente de la rotación hasta que se recupera.

  • Comprobación TCP (check): Conectividad básica del puerto.
  • Comprobación HTTP (option httpchk): Envía una solicitud HTTP (por ejemplo, GET /health) y espera un código de estado HTTP válido (2xx o 3xx).
  • Comprobación SSL Hello (ssl-hello-chk): Comprueba si se puede establecer un handshake SSL.

Características Avanzadas de HAProxy

Terminación y Descarga SSL

HAProxy puede manejar el cifrado y descifrado SSL/TLS, descargando esta tarea intensiva en CPU de los servidores backend. Descifra el tráfico HTTPS entrante y reenvía HTTP plano al backend, o puede volver a cifrar para SSL de extremo a extremo.

frontend https_in
    bind *:443 ssl crt /etc/haproxy/certs/mydomain.pem
    mode http
    default_backend web_servers

Sesiones Pegajosas (Persistencia)

Las sesiones pegajosas aseguran que las solicitudes de un cliente se enruten consistentemente al mismo servidor backend durante toda su sesión. Esto es crítico para aplicaciones que mantienen el estado de la sesión en servidores individuales.

  • Persistencia basada en cookies: HAProxy inserta una cookie en el navegador del cliente, que luego se utiliza para identificar el servidor backend correcto para solicitudes posteriores.
  • Persistencia de IP de origen: Utiliza la dirección IP de origen del cliente para enrutar consistentemente al mismo servidor (menos fiable detrás de NAT).
backend web_servers_sticky
    balance roundrobin
    cookie SERVERID insert indirect nocache
    server s1 10.0.0.10:80 check cookie s1
    server s2 10.0.0.11:80 check cookie s2

Enrutamiento Basado en Contenido

El enrutamiento basado en contenido dirige el tráfico a diferentes grupos de servidores backend basándose en atributos específicos dentro de la solicitud del cliente, como la ruta de URL solicitada, el encabezado de host HTTP o los encabezados HTTP personalizados. Esto facilita las arquitecturas de microservicios o las aplicaciones multi-inquilino.

(Ejemplo ya mostrado en la sección frontend con acl host_app1 y use_backend).

Alta Disponibilidad del Propio HAProxy

Mientras que HAProxy está diseñado para la alta disponibilidad de los servicios backend, las propias instancias de HAProxy pueden hacerse altamente disponibles utilizando mecanismos externos como VRRP (Virtual Router Redundancy Protocol) con herramientas como Keepalived. Esto crea una dirección IP flotante que automáticamente conmuta por error entre los servidores HAProxy primario y secundario en caso de un fallo, asegurando un servicio de balanceo de carga continuo.

HAProxy vs. Nginx (Breve Comparación)

Tanto HAProxy como Nginx pueden funcionar como proxies inversos y balanceadores de carga. Sus objetivos de diseño principales y patrones de implementación típicos difieren.

Característica HAProxy Nginx
Rol Principal Balanceador de Carga y Proxy dedicado, de alto rendimiento Servidor Web, Proxy Inverso, Balanceador de Carga, Caché
Rendimiento Extremadamente alto (especialmente L4/TCP) Alto (bueno en general)
Configuración Diseñado específicamente para balanceo de carga, amplias opciones Más de propósito general, flexible
Almacenamiento en Caché Limitado (requiere módulos externos) Nativo, potente almacenamiento en caché HTTP
Servicio de Archivos Estáticos No es su enfoque principal Excelente, altamente optimizado
Modularidad Relativamente monolítico Altamente modular con un rico ecosistema de módulos
Terminación SSL
WebSockets

HAProxy se elige a menudo para entornos críticos y de alto tráfico donde el rendimiento puro del balanceo de carga y las robustas comprobaciones de salud son primordiales. Nginx se utiliza con frecuencia cuando se necesita una combinación de servicio web, almacenamiento en caché y proxy inverso, junto con el balanceo de carga. Es común verlos implementados juntos, con HAProxy actuando como el balanceador de carga principal y Nginx manejando el proxying a nivel de aplicación específico o el contenido estático.

Actualizado: 03.03.2026
Volver a la categoría

Pruebe nuestros proxies

20,000+ proxies en 100+ países del mundo

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.