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:

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_llibertatcatalunya hdr(host) -i llibertatcatalunya.cat
 acl host_llibertatcatalunya hdr(host) -i www.llibertatcatalunya.cat
 acl host_llibertatcatalunya hdr(host) -i freedomcatalonia.eu
 acl host_llibertatcatalunya hdr(host) -i www.freedomcatalonia.eu

# Figure out which one to use
 use_backend web-backend-llibertatcatalunya-cat if host_llibertatcatalunya
 #default_backend web-backend-llibertatcatalunya-cat

 backend web-backend-llibertatcatalunya-cat
 balance roundrobin
 mode http

server srv01 localhost:8000 check


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.