Icono del sitio Binario 0

Cómo configurar HAProxy como proxy inverso con multiples dominios

Artículos Guías Manuales Sistemas Linux Windows Binario 0

Artículos Guías Manuales Sistemas Linux Windows Binario 0

FacebookEmailWhatsAppLinkedInRedditXShare

Guía Avanzada de Configuración de HAProxy

La configuración avanzada de HAProxy como proxy inverso permite optimizar y asegurar la distribución del tráfico entre múltiples servidores backend, garantizando alta disponibilidad y rendimiento. Para implementar estas configuraciones, es esencial definir reglas de balanceo de carga más sofisticadas, como el balanceo basado en sesiones o cookies, o el uso de algoritmos avanzados como "leastconn" para asignar nuevas conexiones al servidor con menos conexiones activas. Además, se pueden implementar controles de salud personalizados mediante sondas HTTP/HTTPS para monitorear el estado de los servidores backend y retirar automáticamente aquellos que no respondan correctamente. También es posible integrar HAProxy con certificados SSL/TLS para cifrar el tráfico y utilizar ACLs (listas de control de acceso) para gestionar y restringir el acceso a ciertos recursos, basándose en una variedad de parámetros como la IP del cliente, el encabezado HTTP, o los patrones de URL. Con estas configuraciones avanzadas, HAProxy no solo actúa como un simple distribuidor de tráfico, sino que se convierte en una herramienta integral para la gestión eficiente y segura de la infraestructura web.

Global Configuration

global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
user haproxy
group haproxy
daemon
maxconn 32768

ca-base /etc/ssl/certs
crt-base /etc/ssl/private

ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets

Default Configuration

defaults
log global
mode http
option httplog
option dontlognull
option forwardfor
timeout http-request 60s
timeout connect 600s
timeout client 600s
timeout server 600s
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http

Estadísticas

listen stats
bind *:9000
mode http
stats enable
stats hide-version
stats refresh 10s
stats show-node
stats uri /server-status

Frontends

HTTP Frontend

frontend www80_front
bind *:80
mode http
option httplog

acl is_example1.com hdr_end(host) -i example1.com
acl is_example2.com hdr_end(host) -i example2.com
acl is_www.example2.com hdr_end(host) -i www.example2.com
acl is_example3.com hdr_end(host) -i example3.com
acl is_www.example3.com hdr_end(host) -i www.example3.com

use_backend example180 if is_example1.com
use_backend example280 if is_example2.com
use_backend example280 if is_www.example2.com
use_backend example380 if is_example3.com
use_backend example380 if is_www.example3.com

HTTPS Frontend

frontend www443_front
mode tcp
option tcplog
bind *:443
acl tls req.ssl_hello_type 1
tcp-request inspect-delay 1s
tcp-request content accept if tls

acl is_example1.com_443 req.ssl_sni -i example1.com
acl is_example2.com_443 req.ssl_sni -i example2.com
acl is_www.example2.com_443 req.ssl_sni -i www.example2.com
acl is_example3.com_443 req.ssl_sni -i example3.com
acl is_www.example3.com_443 req.ssl_sni -i www.example3.com

use_backend example1443 if is_example1.com_443
use_backend example2443 if is_example2.com_443
use_backend example2443 if is_www.example2.com_443
use_backend example3443 if is_example3.com_443
use_backend example3443 if is_www.example3.com_443

Backends

Example 1

backend example180
mode http
server apache80 192.168.20.12:80 send-proxy check

backend example1443
mode tcp
option ssl-hello-chk
server apache443 192.168.20.12:443 send-proxy check

Example 2

backend example280
mode http
server apache80 192.168.20.15:80 send-proxy check

backend example2443
mode tcp
option ssl-hello-chk
server apache443 192.168.20.15:443 send-proxy check

Example 3

backend example380
mode http
server apache80 192.168.20.14:80 send-proxy check

backend example3443
mode tcp
option ssl-hello-chk
server apache443 192.168.20.14:443 send-proxy check

Configuración final completa del fichero de haproxy como proxy inverso con multiples dominios:

global
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
    stats timeout 30s
    user haproxy
    group haproxy
    daemon
    maxconn 32768

    # Default SSL material locations
    ca-base /etc/ssl/certs
    crt-base /etc/ssl/private

    # See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate
    ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
    ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
    ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets

defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    option forwardfor
    timeout  http-request 60s
    timeout connect 600s
    timeout client  600s
    timeout server  600s
    errorfile 400 /etc/haproxy/errors/400.http
    errorfile 403 /etc/haproxy/errors/403.http
    errorfile 408 /etc/haproxy/errors/408.http
    errorfile 500 /etc/haproxy/errors/500.http
    errorfile 502 /etc/haproxy/errors/502.http
    errorfile 503 /etc/haproxy/errors/503.http
    errorfile 504 /etc/haproxy/errors/504.http

listen  stats
    bind  *:9000
    mode  http
    stats enable
    stats hide-version
    stats refresh 10s
    stats show-node
    stats uri  /server-status

frontend www80_front
    bind *:80
    mode http
    option httplog

    acl is_example1.com hdr_end(host) -i example1.com
    acl is_example2.com hdr_end(host) -i example2.com
    acl is_www.example2.com hdr_end(host) -i www.example2.com
    acl is_example3.com hdr_end(host) -i example3.com
    acl is_www.example3.com hdr_end(host) -i www.example3.com

    use_backend example180 if is_example1.com
    use_backend example280 if is_example2.com
    use_backend example280 if is_www.example2.com
    use_backend example380 if is_example3.com
    use_backend example380 if is_www.example3.com

frontend www443_front
    mode tcp
    option tcplog
    bind *:443
    acl tls req.ssl_hello_type 1
    tcp-request inspect-delay 1s
    tcp-request content accept if tls

    acl is_example1.com_443 req.ssl_sni -i example1.com
    acl is_example2.com_443 req.ssl_sni -i example2.com
    acl is_www.example2.com_443 req.ssl_sni -i www.example2.com
    acl is_example3.com_443 req.ssl_sni -i example3.com
    acl is_www.example3.com_443 req.ssl_sni -i www.example3.com

    use_backend example1443 if is_example1.com_443
    use_backend example2443 if is_example2.com_443
    use_backend example2443 if is_www.example2.com_443
    use_backend example3443 if is_example3.com_443
    use_backend example3443 if is_www.example3.com_443

backend example180
    mode http
    server apache80 192.168.20.12:80 send-proxy check

backend example1443
    mode tcp
    option ssl-hello-chk
    server apache443 192.168.20.12:443 send-proxy check

backend example280
    mode http
    server apache80 192.168.20.15:80 send-proxy check

backend example2443
    mode tcp
    option ssl-hello-chk
    server apache443 192.168.20.15:443 send-proxy check

backend example380
    mode http
    server apache80 192.168.20.14:80 send-proxy check

backend example3443
    mode tcp
    option ssl-hello-chk
    server apache443 192.168.20.14:443 send-proxy check

Explicación

Esta configuración permite manejar múltiples dominios y subdominios en los puertos HTTP y HTTPS, redirigiendo el tráfico a los backends correspondientes según las reglas definidas.

Conclusión

Esta configuración de HAProxy permite gestionar múltiples dominios y subdominios en los puertos HTTP y HTTPS. Las ACLs se utilizan para dirigir el tráfico a los backends apropiados, asegurando que cada solicitud se maneje correctamente según el dominio solicitado. La seguridad se refuerza

Salir de la versión móvil