Ver contenido
carlosazaustre.es carlosazaustre.es

Cómo configurar Nginx con Node.js en Producción

🗓 | 💻 Desarrollo | 🕐 2 minutos de lectura | 💬 Comments

¿Qué pasa si tienes un VPS o una instancia EC2 en Amazon Web Services y quieres tener varios procesos de Node ejecutándose?

¿Y si quieres servir la parte pública de una aplicación web por un lado y la parte Backend por otro?

Si corremos nuestra app Node en el puerto 80 para que sea accesible desde una IP o dominio, no podemos usar el mismo puerto con otro proceso. ¿Cómo podemos solucionar esto? con Nginx.

nodenginx

Nginx es un servidor web, al estilo de Apache pero orientado a eventos (como Node) y actúa como un proxy lo que nos permite redireccionar el tráfico entrante en función del dominio de donde vienen, hacia el proceso y puerto que nos interese.

nginx como reverse proxy

En este tutorial veremos como configurarlo en una instancia Amazon de una manera muy sencilla. Vamos a ello!

Gracias a Node, he pasado del mundo Frontend al Backend intentado ser un Full-Stack Developer. Esto ha hecho que pase de tocar el backend a acercarme peligrosamente al mundo DevOp, lo cuál es divertido porque aprendes algo nuevo y tienes una visión más amplia de la arquitectura web.

No he probado esto en local, porque me daba muchos fallos, si alguien tiene más experiencia con Nginx puede dejar en los comentarios sus aportes y entre todos aprenderemos más :)

Esto está probado en una instancia Ec2 de Amazon Web Services. Si no sabes como arrancar y configurar una, en ésta antigua entrada del blog cuento como hacerlo.

Una vez tenemos nuestro servidor con Linux (Ubuntu preferiblemente), instalamos Nginx

Ahora creamos una carpeta donde se alojará el contenido público y HTML estático que serviremos por el puerto 80.

Configuramos Nginx en su fichero default de configuración

Y sustituimos el contenido del fichero por este otro, sustituyendo tu_dominio por el nombre de tu dominio en cuestión.

Antes de reiniciar Nginx, acuérdate de configurar en el Panel de configuración de DNS de tu dominio, de tal manera que tu_dominio.com apunte con un registro tipo A a la IP de tu servidor. De paso configura un subdominio tipo sudominio.tu_dominio.com que apunte también a la misma IP de tu máquina, también como registro tipo A.

Este archivo indica que escuche en el puerto 80 y muestre el contenido de la carpeta /var/www/tu_dominio cuando se acceda por el navegador con el nombre tu_dominio.com.

Para que se vea algo cuando accedamos, creamos un archivo index.html en esa carpeta con el contenido que queramos

Y el contenido puede ser un simple “Hola Mundo”;

Para finalizar esta parte, editamos el archivo /etc/hosts y añadimos los dominios de tal manera que quede así

Ya podemos reiniciar Nginx

Creamos un symlink del archivo default en la carpeta sites-enabled

De esta manera, si todo va bien, al acceder a tu_dominio.com veremos un “Hola Mundo” en el navegador.

Configuración de Node.js con Nginx.

Ahora queremos que una aplicación Node, que está corriendo en nuestro servidor en el puerto 3000 sea accesible a través de subdominio.tu_dominio.com. Esto lo conseguiremos haciendo lo siguiente:

Creamos un archivo de configuración para nuestro subdominio:

Y añadimos la siguiente configuración, de modo que Nginx actúe como un Proxy que redirija al puerto 3000 del servidor cuando el tráfico provenga de subdominio.tu_dominio.com

Creamos un symlink para este archivo en sites-enabled como hicimos con el fichero default.

Si accedemos a subdominio.tu_dominio.com nos aparecerá el mensaje Error 502 – Bad Gateway, esto es porque aún no tenemos nada corriendo en el puerto 3000 y no tiene nade que mostrar.

Por tanto es hora de poner en marcha nuestra app node, desde cualquier directorio del servidor que queramos y ejecutarla preferiblemente con forever

Si el servidor se reiniciara por alguna razón, tendríamos que ejecutar estos comandos de node de nuevo, para evitar y esto y conseguir que las aplicaciones se nos ejecuten automáticamente con el inicio de la máquina, creamos un job

con el siguiente contenido:

Y listo!, si entramos en subdominio.tu_dominio.com veremos nuestra aplicación node ejecutándose y si entramos por dominio.com veremos un Hola Mundo, estando los dos proyectos en la misma máquina.

✎ ¿Ves alguna errata? ¿Quieres modificar algo? Haz una Pull Request.

Carlos Azaustre

Soy Carlos Azaustre. Desarrollador web desde hace más de 8 años. He trabajado en Google, IBM y Eventbrite. Soy GDE (Google Developer Expert) en Tecnologías Web. Desde 2013 intento documentar en éste blog todo lo que aprendo y así compartirlo con el resto de la comunidad.

📬 Únete y ponte al día en desarrollo web

Recibe puntualmente información sobre las últimas novedades en tecnologías web y desarrollo web moderno para que estés siempre actualizadx:

🔒 Libre de Spam. Sólo contenido que te interesa..