Tarea 2.2: Proxy inverso y balanceador de carga
En esta tarea vas a configurar un proxy inverso que da acceso a dos sitios web internos y un balanceador de carga que reparte las peticiones entre dos servidores web. El proxy inverso lo vamos a realizar con apache2.
Parte 1: Proxy inverso
Vamos a usar el escenario2 del repositorio ejercicios_sri para montar el siguiente escenario:

- Una máquina
proxyque está conectada al exterior por una red NAT y a una red interna muy aislada (dirección10.0.0.1). - Una máquina
backendque tendrá un servidor web interno, conectada a la red interna muy aislada (dirección10.0.0.2). También está conectada a la red NAT, pero sólo para poder configurarla con la receta ansible.
La receta de ansible del escenario (directorio ansible/) instala apache2 en el backend y crea los virtual hosts que indiques en la variable virtualhosts del fichero ansible/group_vars/all. Configúrala para crear dos virtual hosts:
vhost1.conf, con el nombreinterno.example1.orgy DocumentRoot/var/www/example1.vhost2.conf, con el nombreinterno.example2.orgy DocumentRoot/var/www/example2.
Pon tu clave pública en los ficheros cloud-init/user-data-*.yaml y crea el escenario con tofu init y tofu apply. OpenTofu genera el inventario de ansible (ansible/hosts) con la IP del backend en la red NAT. Después, desde el directorio ansible/, ejecuta el playbook con ansible-playbook site.yaml.
- Proxy inverso. Instala apache2 en el
proxyy configúralo para acceder a la primera página con el nombrewww.app1.orgy a la segunda conwww.app2.org. Añade en la resolución estática delproxylos nombres internos de las páginas. - La cabecera
Host. Cambia la configuración para que el proxy envíe albackendel nombre que ha pedido el cliente (ProxyPreserveHost On). Accede awww.app1.orgy awww.app2.org, mira el log delbackendy vuelve a dejar la configuración que funciona. - Redirecciones. En el
backend, configurainterno.example1.orgpara que/directorioredirija a/nuevodirectorio. Accede ahttp://www.app1.org/directorioa través del proxy con la reescritura de las redirecciones y sin ella (ProxyPassReverse).
Parte 2: Balanceador de carga
Vamos a usar el escenario3 del repositorio ejercicios_sri: crea el escenario con OpenTofu y, desde el directorio ansible/, ejecuta el playbook (el inventario también lo genera OpenTofu). La receta instala apache2 con php en apache1 y apache2, con una página index.php que muestra el nombre del servidor.

-
Balanceador y la IP del cliente. Instala haproxy en el
balanceadory configúralo para repartir la carga entreapache1yapache2, con el nombrewww.example.org. Mira en el log de uno de los servidores web qué IP aparece como cliente. Después, configura haproxy para que envíe la IP real del cliente (option forwardfor) y cambia el formato de log del servidor web para que la registre. -
Afinidad de sesión. Crea en los dos servidores web el fichero
sesion.php:<?php session_start(); $_SESSION['visitas'] = ($_SESSION['visitas'] ?? 0) + 1; echo "<h1>Servidor: " . gethostname() . "</h1>"; echo "<p>Visitas en esta sesión: " . $_SESSION['visitas'] . "</p>"; ?>Recarga varias veces
http://www.example.org/sesion.phpy fíjate en el contador. Después, configura haproxy para que un mismo cliente vaya siempre al mismo servidor usando una cookie (cookie SERVERID insert) y vuelve a probar.