Nginx como Proxy Inverso para Node.js y PM2 en Debian 13

proxy inverso nodejs debian 13 scaled

Cómo configurar un Proxy Inverso para Node.js en Debian 13

Al llevar aplicaciones a entornos de producción, implementar un Proxy Inverso para Node.js en Debian 13 es uno de los estándares fundamentales de arquitectura y ciberseguridad. Aunque un servidor Node.js puede recibir tráfico directamente, delegar la recepción de peticiones web a un servidor especializado como Nginx proporciona ventajas críticas en rendimiento, terminación SSL, manejo de archivos estáticos y protección contra ataques.

En este tutorial aprenderás paso a paso cómo desplegar una aplicación web administrada con PM2 y configurar un Proxy Inverso para Node.js en Debian 13 utilizando el servidor web Nginx.

Requisitos Previos

Antes de proceder a configurar el Proxy Inverso para Node.js en Debian 13, confirma que dispones de los siguientes elementos en tu servidor:

  1. Un servidor con el sistema operativo Debian 13 (Trixie) instalada y un usuario con privilegios sudo o acceso a root.
  2. Node.js y NPM previamente instalados en el sistema.
  3. Un nombre de dominio (FQDN) apuntando a la dirección IP pública de tu servidor.

Paso 1: Instalar PM2 y preparar la aplicación Node.js

Para que la infraestructura con Proxy Inverso para Node.js en Debian 13 sea tolerante a fallos, utilizaremos el gestor de procesos PM2. Este mantendrá la aplicación ejecutándose en segundo plano y la reiniciará automáticamente ante caídas o reinicios del sistema.

1.1. Instalar PM2 en el servidor: Instalación global desde el gestor de paquetes NPM.

Instala PM2 de forma global en tu sistema Debian 13 con el siguiente comando:

Bash
sudo npm install -g pm2

2.2. Crear la aplicación de prueba: Despliegue inicial de un servicio web simple.

Crea el directorio del proyecto y genera un archivo básico app.js que escuchará en el puerto interno 3000:

Bash
mkdir -p /var/www/miapp && cd /var/www/miapp
nano app.js

Añade el siguiente código JavaScript:

JavaScript
const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.write('Servidor Node.js activo detras de un Proxy Inverso en Debian 13\n');
  res.end('Sitio Web Oscar Cifuentes | https://oscarcifuentes.cl \n');
});

server.listen(port, hostname, () => {
  console.log(`Servidor escuchando internamente en http://${hostname}:${port}/`);
});

3.3. Iniciar el proceso y habilitar el arranque automático: Ejecución persistente con el gestor de servicios systemd.

Inicia la aplicación en PM2 con un nombre descriptivo:

Bash
pm2 start app.js --name "node-app"
Proxy Inverso para Node.js en Debian 13

Para asegurar que el servicio se inicie automáticamente tras un reinicio del servidor Debian 13, genera la integración con systemd:

Bash
pm2 startup systemd

Copia y ejecuta la línea de comando que generará la salida de la terminal y guarda el estado actual:

Bash
pm2 save

Paso 2: Instalación del Servidor Web Nginx

El siguiente paso para habilitar el Proxy Inverso para Node.js en Debian 13 es instalar el servidor HTTP Nginx desde los repositorios oficiales de la distribución:

Bash
sudo apt update
sudo apt install nginx -y

Verifica que el servicio de Nginx esté activo y funcionando correctamente:

Bash
sudo systemctl status nginx

Paso 3: Configuración del Proxy Inverso para Node.js en Debian 13

Ahora crearemos el archivo de bloque de servidor (Virtual Host) en Nginx, el cual interceptará el tráfico web del puerto 80 y lo redirigirá internamente al puerto 3000 donde se ejecuta la aplicación Node.js.

Crea un nuevo archivo de configuración en sites-available:

Bash
sudo nano /etc/nginx/sites-available/node-proxy.conf

Añade la siguiente estructura de configuración (asegúrate de reemplazar tu-dominio.com por tu dominio o dirección IP):

Nginx
server {
    listen 80;
    server_name tu-dominio.com www.tu-dominio.com;

    location / {
        # Redirección hacia el puerto local de Node.js
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        
        # Cabeceras requeridas para Sockets y transmisión de IP real
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        proxy_cache_bypass $http_upgrade;
    }
}

Habilitar y validar la configuración en Nginx

Para poner en marcha la configuración del Proxy Inverso para Node.js en Debian 13, habilita el sitio mediante un enlace simbólico hacia sites-enabled:

Bash
sudo ln -s /etc/nginx/sites-available/node-proxy.conf /etc/nginx/sites-enabled/

Valida que el archivo no contenga errores de sintaxis:

Bash
sudo nginx -t

Si la prueba es exitosa (syntax is ok), recarga Nginx para aplicar los cambios:

Bash
sudo systemctl reload nginx

Paso 4: Verificación y Monitoreo

Para comprobar que el Proxy Inverso para Node.js en Debian 13 funciona de manera óptima, abre un navegador web e ingresa a (http://tu-dominio.com). Verás el mensaje "Servidor Node.js activo detrás de un Proxy Inverso en Debian 13".

proxy inverso nodejs debian13 02

Puedes monitorear el consumo de recursos de la aplicación administrada por PM2 en tiempo real ejecutando:

Bash
pm2 monit

Preguntas Frecuentes sobre Proxy Inverso para Node.js en Debian 13

¿Por qué implementar un Proxy Inverso para Node.js en Debian 13 en lugar de exponer el puerto directamente?

Utilizar un proxy inverso mejora drásticamente la seguridad del servidor al evitar la ejecución de Node.js con privilegios de root para escuchar en puertos bajos (80/443). Además, Nginx gestiona eficientemente las conexiones lentas, el almacenamiento en caché de archivos estáticos y el balanceo de carga entre múltiples instancias de la aplicación.

¿Cómo añadir cifrado SSL/HTTPS al Proxy Inverso para Node.js en Debian 13?

Puedes automatizar la obtención e instalación de certificados SSL gratuitos con Certbot sobre Debian 13 ejecutando:

Bash
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d tu-dominio.com -d www.tu-dominio.com

Certbot actualizará automáticamente la regla del proxy inverso para forzar el uso de conexiones seguras HTTPS.

Publicaciones Similares