Proxy Inverso para Node.js en AlmaLinux 10 con Nginx y PM2

proxy inverso nodejs almalinux 10 scaled

Cómo configurar un Proxy Inverso para Node.js en AlmaLinux 10

Configurar un Proxy Inverso para Node.js en AlmaLinux 10 utilizando el servidor web Nginx es la mejor práctica de arquitectura en entornos Enterprise Linux. Exponer directamente el servidor interno de Node.js a Internet en puertos privilegiados (como el 80 o 443) representa un riesgo innecesario. Al interponer Nginx al frente, obtendrás mejoras inmediatas en seguridad, capacidad de balanceo de carga, manejo eficiente de archivos estáticos y terminación SSL.

En esta guía paso a paso aprenderás a desplegar una aplicación administrada con PM2 y configurar un Proxy Inverso para Node.js en AlmaLinux 10, incluyendo los ajustes necesarios en SELinux y firewalld.

Requisitos Previos

Antes de proceder a configurar el Proxy Inverso para Node.js en AlmaLinux 10, asegúrate de contar con los siguientes elementos:

  1. Un servidor con AlmaLinux 10 y acceso a la cuenta root o a un usuario con privilegios sudo.
  2. Node.js y NPM previamente instalados en el sistema.
  3. Un nombre de dominio apuntando a la dirección IP pública de tu servidor.

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

Para garantizar la máxima disponibilidad de la arquitectura con Proxy Inverso para Node.js en AlmaLinux 10, utilizaremos el gestor de procesos PM2.

1.1. Instalar PM2 en AlmaLinux 10: Instalación global con el gestor NPM.

Instala PM2 de manera global ejecutando el siguiente comando:

Bash
sudo npm install -g pm2

2.2. Crear la aplicación de prueba: Despliegue de un servidor HTTP básico.

Crea el directorio para tu proyecto y genera el archivo app.js escchando 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 ejecutándose detras de Nginx en AlmaLinux 10\n');
  res.end('Sitio Web Oscar Cifuentes | https://oscarcifuentes.cl\n');
});

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

3.3. Iniciar el proceso y configurar persistencia:Integración con systemd para reinicios automáticos.

Inicia la aplicación en PM2 dándole un identificador:

Bash
pm2 start app.js --name "node-app"
Proxy Inverso para Node.js en AlmaLinux 10

Genera la regla para que PM2 se inicie de forma automática con el sistema operativo:

Bash
pm2 startup systemd

Ejecuta en consola la línea generada por la terminal y guarda el estado de los procesos:

Bash
pm2 save

Paso 2: Instalación de Nginx en AlmaLinux 10

Instala el servidor web Nginx desde el repositorio AppStream de AlmaLinux 10 usando DNF:

Bash
sudo dnf install nginx -y

Inicia el servicio y habilítalo para que arranque automáticamente con el sistema:

Bash
sudo systemctl enable --now nginx

Paso 3: Configuración de SELinux y Firewalld

A diferencia de otras distribuciones, las políticas de seguridad en Enterprise Linux requieren dos ajustes previos obligatorios para habilitar el Proxy Inverso para Node.js en AlmaLinux 10:

1. Permitir que Nginx realice conexiones de red (SELinux)

Por defecto, SELinux bloquea los intentos de Nginx de conectarse a sockets de red locales. Habilita el booleano httpd_can_network_connect:

Bash
sudo setsebool -P httpd_can_network_connect 1

2. Abrir los puertos HTTP/HTTPS en el cortafuegos (Firewalld)

Permite el tráfico web entrante a través de firewalld:

Bash
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

Paso 4: Configurar Nginx como Proxy Inverso

Crea un archivo de bloque de servidor (Virtual Host) dedicado para la aplicación dentro del directorio /etc/nginx/conf.d/:

Bash
sudo nano /etc/nginx/conf.d/node-proxy.conf

Añade las siguientes directivas (reemplaza tu-dominio.com por tu dominio real o IP pública):

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

    location / {
        # Redirección de peticiones al puerto interno de Node.js
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        
        # Cabeceras para soporte de WebSockets y paso de IP cliente
        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;
    }
}

Validar y reiniciar el servicio

Comprueba que el archivo de configuración no contenga errores de sintaxis:

Bash
sudo nginx -t

Si el test resulta exitoso (syntax is ok), recarga la configuración de Nginx:

Bash
sudo systemctl reload nginx

Paso 5: Verificación del Servicio

Para confirmar que el Proxy Inverso para Node.js en AlmaLinux 10 funciona correctamente, ingresa desde un navegador web a [http://tu-dominio.com](http://tu-dominio.com). Deberías visualizar el texto "Servidor Node.js ejecutándose detrás de Nginx en AlmaLinux 10".

proxy inverso nodejs almalinux 10 02

Puedes verificar la salud, memoria y uso de CPU de tus procesos Node.js ejecutando:

Bash
pm2 monit

Preguntas Frecuentes sobre Proxy Inverso para Node.js en AlmaLinux 10

¿Por qué Nginx devuelve un error '502 Bad Gateway' tras configurar el proxy inverso?

En AlmaLinux 10, la causa más común del error 502 es que SELinux está bloqueando a Nginx. Asegúrate de haber ejecutado el comando sudo setsebool -P httpd_can_network_connect 1 para permitir las conexiones salientes de Nginx hacia el puerto 3000.

¿Cómo instalar un certificado SSL gratuito con Certbot en AlmaLinux 10?

Instala Certbot mediante EPEL o DNF y ejecuta el complemento automático para Nginx:

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

Publicaciones Similares