21 May 2015

NodeJs detras de Nginx

NodeJs detras de Nginx

Si ya tienes un servicio de Node.js corriendo en tu servidor, y deseas que se pueda invocar desde un dominio, no hace falta más que ponerlo detrás de un proxy de Nginx que transfiera todas las peticiones entre una y otra parte.

Para hacerlo, ya con tu servicio de Node.js en ejecución, hay que activar el vhost y su función de proxy desde Nginx, editando el /etc/nginx/sites-available/default o creando un nuevo archivo, con la siguiente información:


upstream sub.dominio.com {
  server 127.0.0.1:3000; #Puerto de escucha de Node.js
}

server {
  listen 80;
  server_name sub.dominio.com;
  access_log /var/log/nginx/sub.dominio.access.log;
  error_log /var/log/nginx/sub.dominio.log debug;

  location / {
    proxy_set_header Access-Control-Allow-Origin $http_origin; #CORS
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarder-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;

    proxy_pass http://sub.dominio.com;
    proxy_redirect off;
  }
}


La cabecera de Access-Control-Allow-Origin, se debe habilitar únicamente si se desea permitir la comunicación entre diferentes dominios (una aplicación que corra en un sitio distinto al que controla el Node.js).

Si creaste un nuevo archivo de configuración, recuerda que debes crear su enlace a los vhost habilitados


sudo ln -s /etc/nginx/sites-available/sud.dominio.com /etc/nginx/sites-enabled/sub.dominio.com

Con esto, al recargar Ngnix, y consultar la ruta, estarás accediendo al servicio de Node.js.

Si recibes un error 502, es porque el servicio de Node.js no está corriendo o has apuntado el proxy a un puerto que no corresponde.

Artículos relacionados