Post-Image

HaProxy un servidor por cada dominio

Haproxy es un software opensource que nos permite tener nuestro propio balanceador de carga en casa. Lo bueno de esta aplicación es que nos permite disponer de alta disponibilidad en formato Activo-Activo de forma sencilla y al mismo tiempo disponer de un potente software diseñado exclusivamente a esta tarea.

Una de las opciones que se puede utilizar es mantener nuestros certificados de diferentes webs todos centralizados con una mayor facilidad a la hora de gestionarlos, asi como, balancear las peticiones de cada web a un servidor diferente, evitando que la carga de una web afecte a otra web.

Estas opciones son relativamente sencillas de configurar, a continuación os mostramos la parte de la configuración de HaProxy para hacer la redirección de las peticiones.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
frontend secure-http-in
    bind *:443 ssl crt /etc/haproxy/certs/example1.alefnode.com.pem crt /etc/haproxy/certs/example2.alefnode.com.pem crt /etc/haproxy/certs/blog.alefnode.com.pem
    bind *:80

    mode http
    option http-server-close
    option forwardfor

    redirect scheme https if !{ ssl_fc }

    acl letsencrypt-acl path_beg /.well-known/acme-challenge/
    use_backend letsencrypt-backend if letsencrypt-acl

    acl is_blog_alefnode_front hdr(host) -i blog.alefnode.com
    acl is_example1_alefnode_front hdr(host) -i example1.alefnode.com
    acl is_example2_alefnode_front hdr(host) -i example2.alefnode.com

    use_backend blog_alefnode_front if is_blog_alefnode_front
    use_backend example1_alefnode_front if is_example1_alefnode_front
    use_backend example2_alefnode_front if is_example2_alefnode_front


backend letsencrypt-backend
    server letsencrypt 127.0.0.1:8080

backend blog_alefnode_front
    balance roundrobin
    option httpclose
    option forwardfor
    http-request set-header X-Forwarded-Port %[dst_port]
    http-request add-header X-Forwarded-Proto https if { ssl_fc }
    server node1 10.10.0.9:80 check

backend example1_alefnode_front
    balance roundrobin
    option httpclose
    option forwardfor
    http-request set-header X-Forwarded-Port %[dst_port]
    http-request add-header X-Forwarded-Proto https if { ssl_fc }
    server node1 10.10.0.7:80

backend example2_alefnode_front
    balance roundrobin
    option httpclose
    option forwardfor
    http-request set-header X-Forwarded-Port %[dst_port]
    http-request add-header X-Forwarded-Proto https if { ssl_fc }
    server node1 10.10.0.14:8080

Para ejecutar la creación de nuestro primer certificado debemos comentar la opción en la que indicamos que sea siempre HTTPs, una vez tengamos el primer certificado ya no será necesario. Para la ejecución y creacion de un nuevo certificado de let’s encrypt tan solo es necesario ejecutar el comando certbot con los parametros adecuados.

sudo certbot certonly --standalone -d blog.alefnode.com --non-interactive --agree-tos --email adriancampos@teachelp.com --http-01-port=8080

Con esto tendremos nuestro balanceador configurado con certificados SSL centralizados y enviando cada web a un servidor web distinto.