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:
- Un servidor con AlmaLinux 10 y acceso a la cuenta
rooto a un usuario con privilegiossudo. - Node.js y NPM previamente instalados en el sistema.
- 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:
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:
mkdir -p /var/www/miapp && cd /var/www/miapp
nano app.js
Añade el siguiente código 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:
pm2 start app.js --name "node-app"

Genera la regla para que PM2 se inicie de forma automática con el sistema operativo:
pm2 startup systemd
Ejecuta en consola la línea generada por la terminal y guarda el estado de los procesos:
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:
sudo dnf install nginx -y
Inicia el servicio y habilítalo para que arranque automáticamente con el sistema:
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:
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:
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/:
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):
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:
sudo nginx -t
Si el test resulta exitoso (syntax is ok), recarga la configuración de Nginx:
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".

Puedes verificar la salud, memoria y uso de CPU de tus procesos Node.js ejecutando:
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:
sudo dnf install certbot python3-certbot-nginx -y
sudo certbot --nginx -d tu-dominio.com -d www.tu-dominio.com
