Práctica 1.10.b

Implantación de Aplicaciones Web

José Juan Sánchez Hernández

Curso 2024/2025

1 Balanceador de carga con Nginx

En esta práctica vamos a configurar Nginx para que trabaje como un balanceador de carga. Se recomienda la lectura del artículo Nginx Load Balancing - HTTP Load Balancer.

1.1 Infraestructura necesaria

La infraestructura propuesta consta de cuatro máquinas virtuales, una para el balanceador de carga (Load Balancer), dos como frontales web (Front-End) y una como servidor de base de datos MySQL (Back-End).

1.2 Breve descripción de los requisitos

1.3 Arquitectura de una aplicación web en tres niveles

1.4 Instalación de Nginx

En primer lugar, tendremos que instalar el servidor web Nginx.

sudo apt update
sudo apt install nginx -y

Una vez instadlo, podemos examinar los directorios donde se almacenan los archivos de configuración de los Virtual Hosts de Nginx:

En la instalación por defecto sólo tendremos un archivo de configuración default en ambos directorios.

Una posible configuración para un Virtual Host que responde peticiones HTTP en el puerto 80 podría ser la siguiente:

server {
       listen 80;

       server_name _;

       root /var/www/html;
       index index.php index.html;

       location / {
               try_files $uri $uri/ =404;
       }
}

1.5 Cómo configurar Nginx como balanceador de carga

Para configurar Nginx como balanceador de carga, vamos a deshabilitar el sitio por defecto eliminando el enlace simbólico con el siguiente comando:

sudo unlink /etc/nginx/sites-enabled/default

Una vez eliminado, vamos a crear un nuevo archivo de configuración llamado load-balancer.conf en el directorio /etc/nginx/sites-available/ con el siguiente contenido:

upstream frontend_servers {
    server IP_FRONTEND_1;
    server IP_FRONTEND_2;
}

server {
    listen 80;
    server_name _;

    location / {
        proxy_pass http://frontend_servers;
    }
}

Tenga en cuenta que deberá configurar IP_FRONTEND_1 y IP_FRONTEND_2 con los valores de las direcciones IP donde quiere que Nginx redirija las peticiones HTTP.

Habilite el nuevo Virtal Host que acaba de crear.

sudo ln -s /etc/nginx/sites-available/load-balancer.conf /etc/nginx/sites-enabled/

Recargue la configuración de Nginx.

sudo systemctl reload nginx

Nota: Si tiene algún problema al recargar el servicio de Nginx, puede ejecutar el siguiente comando para revisar la sintaxis del archivo de configuración.

sudo nginx -t

1.6 Métodos de balanceo de carga

Nginx nos permite configurar algunos métodos de balanceo de carga dentro de la directiva upstream.

1.7 Entregables

Deberá crear un repositorio en GitHub con el nombre de la práctica y añadir al profesor como colaborador.

El repositorio debe tener el siguiente contenido:

Además del contenido anterior puede ser necesario crear otros archivos de configuración. A continuación se muestra un ejemplo de cómo puede ser la estructura del repositorio:

.
├── README.md
├── conf
│   ├── load-balancer.conf
│   └── 000-default.conf
└── scripts
    ├── .env
    ├── setup_load_balancer.sh
    ├── setup_letsencrypt_https.sh
    ├── install_lamp_frontend.sh
    ├── install_lamp_backend.sh
    ├── deploy_frontend.sh
    └── deploy_backend.sh

1.7.1 Documento técnico

El documento técnico README.md tiene que estar escrito en [Markdown][6] y debe incluir como mínimo los siguientes contenidos:

1.7.2 Scripts de Bash

El directorio scripts debe incluir los siguientes archivos:

2 Referencias

3 Licencia

Licencia de Creative Commons
Esta página forma parte del curso Implantación de Aplicaciones Web de José Juan Sánchez Hernández y su contenido se distribuye bajo una licencia Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional.