Desarrollo

HAProxy, enrutar por host de dominio

A lo largo del año, suelo construir muchas aplicaciones, ya sean soluciones trabajadas o pruebas para aprender algo nuevo. En muchas ocasiones, necesito disponer de un servidor web para alojar estas aplicaciones y la verdad es que como cualquier mortal no quiero gastar mucho dinero. Por este motivo tengo un servidor económico (de 5 o 6 Euros), y voy publicando aquí todos estos proyectos web accesibles desde diferentes dominios.

Cuando comencé a hacer esto me encontré con el problema de que necesitaba poder enrutar diferentes dominios/hosts a los diferentes puertos de cada proyecto, ya que por defecto todo lo que entra al servidor web accede por el puerto 80.

A través de un amigo descubrí HAProxy, me enseñó un poco como funcionaba y me sorprendió su facilidad de uso y posibilidades.

HAProxy es mas que un proxy inverso, es un enrutador de carga de alto rendimiento. Sites con bastante tráfico lo usan para balancear el tráfico hacia otros cluster web. Pero yo lo uso para enrutar varios dominios o subdominios a diferentes hosts o clusters.

Instalar HAProxy.

1. Recomiendo instalar aptitude como instalador de paquetes con el comando «$ apt-get install aptitude«.

2. Instalar HAProxy con el comando «$ aptitude install haproxy«

Configurar HAProxy.

1. Acceder a /etc/haproxy y modificar el fichero haproxy.cfg

2.
Cambiar el contenido del fichero haproxy.cfg por el ejemplo que pongo a continuación, modificando los datos de los dominios que queremos enrutar:

[sourcecode language=»java» wraplines=»false» collapse=»false»]
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
maxconn 2048
#tune.ssl.default-dh-param 2048

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

# Default ciphers to use on SSL-enabled listening sockets.
# For more information, see ciphers(1SSL). This list is from:
# https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
ssl-default-bind-options no-sslv3

defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
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
option forwardfor
option http-server-close

frontend www
bind *:80
mode http
reqadd X-Forwarded-Proto:\ http

# Define hosts
acl host_merkaty hdr(host) -i merkaty.com
acl host_merkaty hdr(host) -i www.merkaty.com

# Figure out which one to use
use_backend web-backend-merkaty-com if host_merkaty
#default_backend web-backend-merkaty-com

backend web-backend-merkaty-com
balance roundrobin
mode http

server srv01 localhost:8000 check
[/sourcecode]


3.
Ejecutar: «$ /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c» para comprobar si los cambios realizados en el fichero de configuración son correctos.

4.
Ejecutar: «$ service haproxy reload» para reiniciar el servicio y para que se apliquen los cambios.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *