Dominio de nuestra página web: Es el nombre que adquirimos a través de proveedores como GoDaddy, Google Domains, Hostinger, entre otros. Este dominio será la dirección que los usuarios utilizarán para acceder a nuestro sitio web.
La IP pública: En muchos casos, la IP pública es dinámica, lo que significa que puede cambiar con frecuencia. Esto puede ser un problema, ya que necesitamos una IP estática para garantizar la accesibilidad constante de nuestros servicios. Para solucionar esto, podemos utilizar servicios como Duck DNS, que monitorea y actualiza automáticamente la IP dinámica. Este servicio es especialmente útil para servicios como VPN, hosting web o conexiones SSH (aunque este último no es recomendable por razones de seguridad).
Configuración del router del ISP: En el router proporcionado por tu proveedor de servicios de Internet (ISP), deberás abrir el puerto 80 (para este ejemplo). La configuración varía según el modelo del router, pero generalmente debes buscar la opción de "Port Forwarding" o "Reenvío de puertos". Allí, deberás agregar una regla que incluya:
IP's estáticas de los servidores en la red local: Tanto los servidores web como el balanceador de carga deben tener direcciones IP estáticas en la red local. Esto asegura que los dispositivos siempre estén accesibles y que la configuración de red sea consistente.
SSL: Adicional a los puntos anteriores, no es obligatorio pero por seguridad debes considerar usar un servicio SSL ya sea que lo contrates con el proveedor del dominio o con Cloudflare que tiene una versión gratuita.
Para este ejemplo consideraremos la siguiente información para la configuración:
Una vez instalado HAProxy podemos revisar si el servicio está activo con el comando:
{% set i %} systemctl status haproxy {% endset %} {% with codigo=i.strip(), isEditable="false" %} {% include 'components/copy-code.html' %} {% endwith %}La salida del comando debe ser algo similar a este:
{% set i %} ● haproxy.service - HAProxy Load Balancer Loaded: loaded (/lib/systemd/system/haproxy.service; enabled; preset: enabled) Active: active (running) since Mon 2025-03-17 12:12:45 CST; 2 days ago Docs: man:haproxy(1) file:/usr/share/doc/haproxy/configuration.txt.gz Main PID: 2643 (haproxy) Tasks: 5 (limit: 8742) CPU: 5min 30.311s CGroup: /system.slice/haproxy.service ├─2643 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock └─2645 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock {% endset %} {% with btn=false, codigo=i.strip(), isEditable="false" %} {% include 'components/copy-code.html' %} {% endwith %}Como podemos ver, HAProxy está activo, entonces podemos proceder a modificar el archivo de configuración con el editor de nano y permisos de superusuario:
{% set ii %} sudo nano /etc/haproxy/haproxy.cfg {% endset %} {% with codigo=ii.strip(), isEditable="false" %} {% include 'components/copy-code.html' %} {% endwith %}Nos vamos hasta el final del archivo de configuración y añadimos la configuración del "frontend":
{% set iii %} # frontend nombre_que_quieras frontend https_frontend # puerto que manejará el 80 bind *:80 # protocolo a usar mode http # nombre de nuestro dominio: ejemplo-dom.com # validador ejemplo-dom.com = is_ejemplo_dom_com (colocar el prefijo "is_", además los guiones medios y puntos se cambian a guiones bajos) acl is_ejemplo_dom_com hdr(host) -i ejemplo-dom.com # el nombre del backend puede ser el que tú quieras use_backend ejemplo_dom_com if is_ejemplo_dom_com {% endset %} {% with codigo=iii.strip() %} {% include 'components/copy-code.html' %} {% endwith %}Una vez configurado el frontend, continuamos en el mismo archivo y añadimos el "backend":
{% set iv %} # backend nombre backend usado en la configuración del frontend backend ejemplo_dom_com # protocolo de balanceo de carga (puedes dejarlo o googlear otros protocolos) balance roundrobin # protocolo para sitios web mode http # enlistar las IPs de los servidores web o coloca la DNS de cada uno de los servidores en caso de usar un servidor DNS. server server1 198.162.10.4:80 check server server2 198.162.10.5:80 check server server3 198.162.10.6:80 check server server4 198.162.10.7:80 check # server{1-4} puede ser el nombre que tú quieras, solo es una referencia para HAProxy # 198.162.10.X:80 = indica que el servidor con esa IP tiene un servicio web activo en el puerto 80, en caso de no usar el 80 solo reemplaza ese valor # check = valida que el servidor esté operando antes de redirigir el tráfico {% endset %} {% with codigo=iv.strip() %} {% include 'components/copy-code.html' %} {% endwith %}Una vez configurado el frontend y el backend en el archivo de HAProxy, guardamos CTRL + S, cerramos CTRL + X. Para validar que la sintaxis de la configuración sea correcta puedes usar el comando:
{% set v %} sudo haproxy -c -f /etc/haproxy/haproxy.cfg {% endset %} {% with codigo=v.strip(), isEditable="false" %} {% include 'components/copy-code.html' %} {% endwith %}
Si todo está bien en términos de sintaxis, la salida del comando debe ser: Configuration file
is valid
Procedemos a reiniciar el servicio de HAProxy con el comando:
Listo, ahora podrás entrar a tu navegador web e ingresar el dominio ejemplo-dom.com. Tu proveedor de dominio
redirigirá a Duck DNS que tiene tu IP y mandará el tráfico a tu router ISP, este a su vez lo mandará a tu balanceador
de carga para finalmente redirigir el tráfico al servidor web
que esté con menos carga.
De forma práctica y simple, te recomiendo que en cada servidor web, en el HTML del sitio, en la página de inicio
coloques un comentario con el número de servidor, y desde el lado del navegador web refresques la página y veas cómo
cambia el número del servidor. Esto con la finalidad de saber si el balanceo de carga está funcionando, ejemplo diagrama de flujo: