Instalar el servicio
1 |
apt install haproxy -y |
Verificar
1 |
haproxy -v |
Instalar certificado SSL
1 2 3 |
sudo systemctl stop haproxy sudo certbot certonly --standalone -d tu_dominio.com -d www.tu_dominio.com sudo systemctl start haproxy |
Navega al Directorio del Certificado:
1 |
cd /etc/letsencrypt/live/tu_dominio.com/ |
Crear archivo
1 |
sudo bash -c 'cat privkey.pem fullchain.pem > /etc/ssl/private/haproxy-letsencrypt.pem' |
Permisos
1 2 |
sudo chmod 600 /etc/ssl/private/haproxy-letsencrypt.pem sudo chown haproxy:haproxy /etc/ssl/private/haproxy-letsencrypt.pem |
Editar el archivo de configruacion
1 |
nano /etc/haproxy/haproxy.cfg |
Agregamos
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 |
global log /dev/log local0 maxconn 4096 user haproxy group haproxy daemon ssl-default-bind-options no-sslv3 ssl-default-bind-ciphers HIGH:!aNULL:!MD5 defaults log global mode http option httplog retries 3 timeout connect 5000ms timeout client 50000ms timeout server 50000ms frontend https_front bind *:443 ssl crt /etc/ssl/private/haproxy-letsencrypt.pem mode http mode http default_backend http_back frontend http_front bind *:80 mode http redirect scheme https code 301 if !{ ssl_fc } backend http_back balance roundrobin cookie SERVERID insert indirect nocache option httpchk GET /healthcheck # Definir ACLs para las URLs específicas acl is_whatsapp_in3 path /WhatsAppIn3.php acl is_tmp path_beg /tmp/ # Forzar el uso del servidor webserver1 si se cumple alguna ACL use-server webserver1 if is_whatsapp_in3 use-server webserver1 if is_tmp # Definición de los servidores server webserver1 192.168.1.10:80 check cookie ws1 maxidle 20h13m20s maxlife 20h13m20s server webserver2 192.168.1.11:80 check cookie ws2 maxidle 20h13m20s maxlife 20h13m20s server webserver_backup 192.168.1.12:80 check backup |
Validar la configuracion
1 |
haproxy -f /etc/haproxy/haproxy.cfg -c |
Inciar y activar el servicio
1 2 |
systemctl enable haproxy systemctl restart haproxy |
Configurar la Renovación Automática de Certificados
Los certificados de Let’s Encrypt tienen una validez de 90 días. Es crucial configurar una renovación automática para evitar que expiren.
Usando Cron y Hooks para Renovar y Actualizar HAProxy:
-
- Crear un Script de Renovación:Crea un script que renueve el certificado, regenere el archivo PEM y reinicie HAProxy.
1sudo nano /usr/local/bin/renew_haproxy_cert.sh
1234567891011121314151617#!/bin/bashDOMAIN="tu_dominio.com"EMAIL="tu_email@ejemplo.com"CERT_PATH="/etc/letsencrypt/live/$DOMAIN"PEM_PATH="/etc/ssl/private/haproxy-letsencrypt.pem"HAPROXY_SERVICE="haproxy"# Renueva el certificadocertbot renew --quiet --deploy-hook "cat $CERT_PATH/privkey.pem $CERT_PATH/fullchain.pem > $PEM_PATH && systemctl reload $HAPROXY_SERVICE"# Verifica si la renovación fue exitosaif [ $? -eq 0 ]; thenecho "Renovación exitosa y HAProxy recargado."elseecho "Error en la renovación del certificado."fi
1sudo chmod +x /usr/local/bin/renew_haproxy_cert.sh
Agregar al contab:130 2 * * * /usr/local/bin/renew_haproxy_cert.sh >> /var/log/haproxy_cert_renew.log 2>&1
- Crear un Script de Renovación:Crea un script que renueve el certificado, regenere el archivo PEM y reinicie HAProxy.