Page cover

PRACTICA: Nginx como proxy

Escenario Real: TechStore S.L.

TechStore es una tienda online de productos tecnológicos que necesita dos entornos: desarrollo (para pruebas del equipo) y producción (acceso público). El objetivo es configurar Nginx en máquinas virtuales para enrutar tráfico según parámetros y virtual hosts, simulando infraestructura empresarial.

  • Dominios: techstore.local (sitio principal), admin.techstore.local (panel administración)

En esta práctica nginx actuará como intermediario inteligente entre los clientes (navegadores) y los servidores backend (VM2). Recibe todas las peticiones HTTP en el puerto 80 y decide a qué backend reenviarlas según reglas configuradas.

  • Los clientes solo conocerán la IP del gateway (MV2 - 10.0.0.10)​

  • Nginx reenviará peticiones a backends internos.

  • Oculta la arquitectura real y protege servidores backend

Cliente (navegador)
    ↓ Solicita: techstore.local/?env=dev
[VM1 Nginx - Proxy Inverso]
    ↓ Analiza parámetro ?env=dev
    ↓ Traduce a: http://192.168.56.11:8080
[VM2 Backend - Puerto 8080]
    ↓ Responde con HTML desarrollo
[VM1 Nginx]
    ↓ Reenvía respuesta al cliente
Cliente ve contenido sin saber origen real

El cliente nunca accede directamente a VM2, siempre pasa por el proxy Nginx en VM1, que además añade headers como X-Real-IP y X-Forwarded-For para que los backends sepan la IP original del cliente.


Paso 1: Crear VMs en VirtualBox

  1. Crea VM1 - Nginx Gateway:

    • Red NAT con IP estática: 10.0.0.10/24

  2. Crea VM2 - Backend Servers:

    • Red NAT con IP estática: 10.0.0.11/24

circle-info

Para configurar las IP estáticas recuerda editar /etc/netplan/*.yaml

Aplicar: sudo netplan apply

Verifica conectividad con ping desde VM1 y viceversa.


Paso 2: Configuración Backend (VM2)

2.1 Instalar Nginx y Node.js

En esta máquina configuraremos dos webs diferentes con dos sites diferentes. Un site sera el de "development" y el otro sera de "production". Adicionalmente le añadiremos un panel de administración por lo que repetiremos el mismo proceso tres veces:

2.2 Crear Aplicación TechStore - Entorno Desarrollo

chevron-rightContenido de la web (Entorno dev):hashtag

2.3 Crear Aplicación TechStore - Entorno Producción

chevron-rightContenido de la web (Entorno Prod):hashtag

2.4 Crear Panel de Administración

chevron-rightContenido HTML (Admin):hashtag

2.5 Configurar Nginx en VM2 (Puertos Múltiples)

Crearemos un server (virtualhost) en nginx de los tres backends cada uno en un puerto diferente:

Cuya configuración será la siguiente:

circle-info

Nota que lo único que cambia es el puerto y la carpeta donde se encuentra el contenido a desplegar. En esta configuración no ponemos nada de dominios ni URL solamente funcionaremos por puerto (de ahí el tema de gateway nginx).

Activar configuración:

Puedes verificar puertos con:

sudo netstat -tlnp | grep nginx (debe mostrar 8080, 8081, 9090)

Instala netstat con sudo apt install netstat.


Paso 3: Configuración Nginx Gateway (VM1)

En esta máquina lo que configuraremos será el proxy que reenviará las peticiones al backend según parámetros. Los primeros pasos serán los mismos en ambas máquinas:

3.1 Instalar Nginx

3.2 Crear Página de Bienvenida Principal

chevron-rightContenido:hashtag

  • Nota como podremos pasar de una a otro con los botones tan solo cambiando el parámetro de "/?env=prod" del navegador gracias al protocolo HTTP.

3.3 Configuración Maestro Nginx con Routing Inteligente

Para esto simplemente crearemos otro server (virtualhost) en esta máquina

Con la siguiente configuración completa:

Activar:


Parte 4: Verificación

4.1 Editar Hosts en Linux/Mac

Para la verificación podemos usar una máquina virtual ubuntu desktop con mozilla para hacer las verificaciones por dominio. Esta máquina debe estar conectada dentro la misma red NAT.

Primero para evitarnos temas de DNS vamos a ir a lo sencillo y vamos a editar el archivo hosts:

Añadir:

Ahora desde un navegador en host y deberias comprobar:

URL
Resultado Esperado
Verificación

http://techstore.local/

Página bienvenida con botones

Fondo gris, 2 botones visibles

http://techstore.local/?env=prod

TechStore PRODUCCIÓN (verde)

Precios €1499/€89, botones compra

http://techstore.local/?env=dev

TechStore DESARROLLO (morado)

Badge "DESARROLLO", precios test

http://admin.techstore.local/

Panel admin terminal negro

Tabla métricas, fondo negro/verde

4.3 Pruebas con cURL

En caso que no dispongas suficiente RAM puedes hacer las verificaciones desde la propia maquina VM1 o host con los siguientes comandos:

4.4 Análisis de Logs

Revisa los logs en VM1 con:

Última actualización