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
- Actualiza el sistema:
sudo apt update && sudo apt upgrade -y
- Instala Node.js desde el repositorio oficial:
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs
- Verifica la instalación:
node -v
npm -v
Instalar Nginx
- Instala Nginx:
sudo apt install nginx -y
- 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.
- Crea un directorio para tu proyecto:
mkdir ~/mi_app_node
cd ~/mi_app_node
- Inicializa el proyecto Node.js:
npm init -y
- Instala Express.js:
npm install express
- 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}`);
});
- 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.
- Crea un archivo de configuración para tu sitio:
sudo nano /etc/nginx/sites-available/mi_app_node
- 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;
}
}
- Activa la configuración:
sudo ln -s /etc/nginx/sites-available/mi_app_node /etc/nginx/sites-enabled/
- Verifica la configuración de Nginx:
sudo nginx -t
- 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
- Permite solo el tráfico HTTP y HTTPS:
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
- 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.
- Instala Certbot:
sudo apt install certbot python3-certbot-nginx -y
- Genera el certificado:
sudo certbot --nginx -d tu_dominio.com
- 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
- Ajusta los tiempos de espera para evitar desconexiones:
server {
...
proxy_read_timeout 90s;
proxy_connect_timeout 90s;
proxy_send_timeout 90s;
}
- 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:
- Instala Node.js y Nginx.
- Crea y prueba tu aplicación Node.js.
- Configura Nginx como proxy reverso.
- Asegura tu servidor con un firewall.
- Protege tu sitio con SSL.
- 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. 🚀