HaProxy un servidor por cada dominio
-
By
Adrián Campos Garrido
-
at
28 August 2018
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.