Nodejs + Nginx

Hola, he creado el típico hola mundo en nodejs

Ejecuto la aplicación de node.js

devscgm@ubuntu:~/EjemplosNode/holaMundoNodejs$ node index.js
listening on *:3000

Abro un navegador y escribo http://ipMaquina:3000 y me muestra el «HOLA MUNDO» que he creado.

Ahora quiero que dado un dominio, por ejemplo www.prueba.com redireccione a mi aplicación en node que esta escuchando en el puerto 3000.

Para ello nos modificamos el fichero de nginx

sudo nano /etc/nginx/sites-available/default

Nos vamos al final del fichero y escribimos lo siguiente:

server {
    listen 80;
 
    server_name prueba.com;
 
    location / {
        proxy_pass http://127.0.0.1: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;
    }
}

Fijaros en el server_name y en proxy_pass

Guardamos y reiniciamos el servidor nginx

sudo service nginx restart

Si tenemos bien configurado nuestro servidor DNS para que apunte el dominio www.prueba.com a la maquina donde tenemos instalado nginx y la aplicación en node.js veremos que en el navegador vemos nuestro «HOLA MUNDO» sin ver el puerto donde realmente esta ejecutándose la aplicación de node.js.

Configurar dominio en Nginx

Hola, a continuación voy a explicar cómo instalar el servidor Nginx y configurarlo para cualquier dominio. Este tutorial puede aplicarse para instalar tantos dominios o subdominios como se deseen y que cada uno apunte a una carpeta distinta.

  • Lo primero es tener instalado el servidor Nginx
sudo apt-get update
sudo apt-get install nginx

Una vez Instalado podemos comprobar que funciona abriendo un navegador web y metiendo la ip de la maquina. Nos saldrá una página de bienvenida por defecto que vienen en Nginx.

  • Ahora creamos una carpeta en donde ubicaremos nuestro proyecto web (la carpeta la podemos crear en donde queramos, yo pongo un ejemplo)
    sudo mkdir -p /var/www/dominio.com/public_html
    

Dándole permisos, al ser aplicación web le damos los permisos a www-data:

sudo chown -R www-data:www-data /var/www/dominio.com/public_html
  • Añadimos dentro de la carpeta creada (en mi ejemplo es /var/www/dominio.com/public_html) un index.html con un HOLA MUNDO de tu dominio para comprobar al final del tutorial que funciona la redirección a la carpeta de tu proyecto web.
  • Creamos el Host Virtual en Nginx
    A continuación vamos a decirle a Nginx que va a tener un nuevo host virtual que gestionar, es decir, que cuando el usuario introduzca en el navegador dominio.com, el servidor tendrá que leer el archivo de configuración que crearemos para saber qué hacer. En Nginx hay dos rutas importantes. La primera de ellas es sites-available, que contiene los archivos de configuración de los hosts virtuales disponibles en el servidor. La otra es sites-enabled, que contiene los archivos de configuración de los sitios habilitados, es decir, los que funcionan en ese momento. Vamos a crear un archivo para dominio.com:
sudo nano /etc/nginx/sites-available/dominio.com

Introducimos el siguiente código

server {
## Escucha en el puerto 80 (HTTP)
listen 80; 

## Raíz donde se encuentra la página Web
root /var/www/dominio.com/public_html;

## Orden de prioridad de los archivos index
index index.html index.htm;

server_name dominio.com;
}
  • A pesar de haber creado este archivo, todavía no podemos acceder a nuestra página Web, ya que la configuración está en sites-available, pero no en sites-enabled. Para habilitar el host virtual crearemos un enlace simbólico entre ambas carpetas:
    $ sudo ln -s /etc/nginx/sites-available/dominio.com /etc/nginx/sites-enabled/dominio.com
    
  • Reiniciamos Ngninx
    sudo service nginx restart
    

fuente.