diciembre 29, 2024
Tabla de Contenido

Cómo Montar un Servidor de Node.js en Nginx

Node.js es conocido por su velocidad y eficiencia, pero para manejar aplicaciones web en producción, necesitas algo más robusto al frente: Nginx. Esta guía te llevará paso a paso para configurar un servidor de Node.js detras de Nginx, incluyendo el manejo de puertos, configuración del firewall y optimización para producción. ¡Empezamos! 🚀

Requisitos Previos

  • Un VPS funcionando (Ubuntu o Debian).
  • Acceso SSH al servidor.
  • Node.js y npm instalados.
  • Nginx instalado.

Pro tip: Asegúrate de tener un dominio configurado para tu servidor, aunque también puedes probar usando la IP.

Paso 1: Instalar Node.js y Nginx

Instalar Node.js

  1. Actualiza el sistema:
sudo apt update && sudo apt upgrade -y
  1. Instala Node.js desde el repositorio oficial:
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs
  1. Verifica la instalación:
node -v
npm -v

Instalar Nginx

  1. Instala Nginx:
sudo apt install nginx -y
  1. Habilita y verifica el servicio:
sudo systemctl enable nginx
sudo systemctl start nginx
sudo systemctl status nginx

Humor tech: Node.js es como el motor de tu coche, pero Nginx es el parachoques que protege contra colisiones directas. 🚗

Paso 2: Configurar tu Aplicación Node.js

Crea una aplicación básica para probar el servidor.

  1. Crea un directorio para tu proyecto:
mkdir ~/mi_app_node
cd ~/mi_app_node
  1. Inicializa el proyecto Node.js:
npm init -y
  1. Instala Express.js:
npm install express
  1. Crea un archivo index.js con el siguiente contenido:
const express = require('express');
const app = express();
const PORT = 3000;

app.get('/', (req, res) => {
    res.send('¡Servidor Node.js funcionando correctamente!');
});

app.listen(PORT, () => {
    console.log(`Servidor corriendo en http://localhost:${PORT}`);
});
  1. Inicia el servidor:
node index.js

Abre tu navegador y accede a http://IP_DEL_SERVIDOR:3000. Si ves el mensaje de prueba, tu aplicación Node.js está funcionando.

Pro tip: Usa pm2 para mantener el servidor activo incluso si cierras la sesión SSH:

sudo npm install -g pm2
pm2 start index.js
pm2 startup

Paso 3: Configurar Nginx como Proxy Reverso

Nginx actuará como un proxy reverso para redirigir las peticiones al servidor Node.js.

  1. Crea un archivo de configuración para tu sitio:
sudo nano /etc/nginx/sites-available/mi_app_node
  1. Agrega la configuración siguiente:
server {
    listen 80;
    server_name tu_dominio.com; # Cambia esto por tu dominio o IP

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}
  1. Activa la configuración:
sudo ln -s /etc/nginx/sites-available/mi_app_node /etc/nginx/sites-enabled/
  1. Verifica la configuración de Nginx:
sudo nginx -t
  1. Reinicia Nginx:
sudo systemctl restart nginx

Accede a tu dominio o IP en el navegador. Ahora deberías ver tu aplicación Node.js funcionando.

Humor tech: Sin proxy reverso, tu servidor está desnudo ante el mundo. ¡Ponle esa capa protectora! 🦸

Paso 4: Configurar el Firewall

  1. Permite solo el tráfico HTTP y HTTPS:
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
  1. Verifica el estado del firewall:
sudo ufw status

Paso 5: Configurar SSL con Let’s Encrypt

Para proteger tu sitio, configura SSL usando Let’s Encrypt.

  1. Instala Certbot:
sudo apt install certbot python3-certbot-nginx -y
  1. Genera el certificado:
sudo certbot --nginx -d tu_dominio.com
  1. Verifica la renovación automática:
sudo certbot renew --dry-run

Ahora tu sitio está protegido con HTTPS.

Pro tip: HTTPS no solo protege a los usuarios, también mejora el SEO de tu sitio. 📈

Paso 6: Optimizar Nginx para Producción

  1. Ajusta los tiempos de espera para evitar desconexiones:
server {
    ...
    proxy_read_timeout 90s;
    proxy_connect_timeout 90s;
    proxy_send_timeout 90s;
}
  1. Habilita la compresión Gzip:
sudo nano /etc/nginx/nginx.conf

Dentro del bloque http:

gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

Reinicia Nginx:

sudo systemctl restart nginx

Humor tech: Optimizar Nginx es como ajustar las velas de un barco. Pequeños cambios pueden hacerte navegar más rápido. 🚢

Resumen

Configurar un servidor de Node.js detrás de Nginx puede parecer complicado, pero estos pasos lo hacen sencillo:

  1. Instala Node.js y Nginx.
  2. Crea y prueba tu aplicación Node.js.
  3. Configura Nginx como proxy reverso.
  4. Asegura tu servidor con un firewall.
  5. Protege tu sitio con SSL.
  6. Optimiza Nginx para producción.

🔥 Pro tip final: Con esta configuración, tu servidor está listo para manejar tráfico como un campeón. Mantente actualizado y revisa regularmente los logs para mantener todo bajo control. 🚀

Entradas relacionadas

Cómo Montar un Servidor de Node.js en Nginx

Cómo Migrar un Proyecto Docker de Local a un VPS

Cómo Implementar un Proyecto de Laravel en un VPS

Guía Definitiva para No Volverte Loco Configurando Firewalls

Guía Completa para Detectar Rootkits con RKHunter y Chkrootkit

Automatización de Backups en Servidores Linux con Rsync y Cron

Más Artículos

Cómo Migrar un Proyecto Docker de Local a un VPS

Cuando tienes un proyecto Docker funcionando perfectamente en tu entorno local y estás..

Cómo Implementar un Proyecto de Laravel en un VPS

Configurar un proyecto de Laravel en un VPS puede sonar como desactivar una..

Guía Definitiva para No Volverte Loco Configurando Firewalls

Configurar un firewall puede sonar tan aterrador como intentar desactivar una bomba en..

Translate »