Cómo configurar Nginx como proxy inverso para la aplicación Nodejs


Nodejs es un marco de JavaScript gratuito, de código abierto, ligero, escalable y eficiente, construido en el motor V8 JavaScript de Chrome, y utiliza un modelo de E/S sin bloqueo controlado por eventos. Nodejs ahora está en todas partes y se ha vuelto tan popular para desarrollar software desde sitios web, aplicaciones web a aplicaciones de red y más.

Nginx es un servidor HTTP de código abierto y alto rendimiento, equilibrador de carga y software de proxy inverso. Tiene un lenguaje de configuración sencillo que facilita su configuración. En este artículo, mostraremos cómo configurar Nginx como un proxy inverso para las aplicaciones Nodejs.

Paso 1: Instalando Nodejs y NPM en Linux

La última versión de Node.js y NPM se puede instalar desde el repositorio oficial de distribuciones binarias NodeSource Enterprise Linux, Fedora, Debian y Ubuntu, que se mantiene en el sitio web de Nodejs y deberá agregarlo a su sistema para poder instalar los últimos paquetes de Nodejs y NPM como se muestra.

---------- Install Node.js v11.x ---------- 
$ curl -sL https://deb.nodesource.com/setup_11.x | sudo -E bash -
$ sudo apt-get install -y nodejs

---------- Install Node.js v10.x ----------
$ curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
$ sudo apt-get install -y nodejs
---------- Install Node.js v11.x ---------- 
$ curl -sL https://rpm.nodesource.com/setup_11.x | bash -

---------- Install Node.js v10.x ----------
$ curl -sL https://rpm.nodesource.com/setup_10.x | bash -

Paso 2: Creando una aplicación Nodejs

Para fines de demostración, crearemos una aplicación de ejemplo llamada "sysmon" , que se ejecutará en el puerto 5000 como se muestra.

$ sudo mkdir -p /var/www/html/sysmon
$ sudo vim /var/www/html/sysmon/server.js

Copie y pegue el siguiente código en el archivo server.js (reemplace 192.168.43.31 con la IP de su servidor).

const http = require('http');

const hostname = '192.168.43.31';
const port = 5000;

const server = http.createServer((req, res) => {
	res.statusCode = 200;
  	res.setHeader('Content-Type', 'text/plain');
  	res.end('Sysmon App is Up and Running!\n');
});

server.listen(port, hostname, () => {
  	console.log(`Server running at http://${hostname}:${port}/`);
});

Guarda el archivo y cierra.

Ahora inicie su aplicación de nodo usando el siguiente comando (presione Ctrl + x para finalizarla).

$ sudo node /var/www/html/sysmon/server.js
OR
$ sudo node /var/www/html/sysmon/server.js &   #start it in the background to free up your terminal

Ahora abra un navegador y acceda a su aplicación en la URL http://198.168.43.31:5000 .

Paso 3: Instale Nginx Reverse Proxy en Linux

Instalaremos la última versión de Nginx desde el repositorio oficial, como se muestra a continuación.

Cree un archivo llamado /etc/apt/sources.list.d/nginx.list y agregue las siguientes líneas.

deb http://nginx.org/packages/ubuntu/ bionic nginx
deb-src http://nginx.org/packages/ubuntu/  bionic nginx

A continuación, agregue la clave de firma del repositorio, actualice el índice de su paquete de sistema e instale el paquete nginx de la siguiente manera.

$ wget --quiet http://nginx.org/keys/nginx_signing.key && sudo apt-key add nginx_signing.key
$ sudo apt update
$ sudo apt install nginx

Cree un archivo llamado /etc/yum.repos.d/nginx.repo y pegue una de las configuraciones a continuación.

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=0 enabled=1
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/rhel/$releasever/$basearch/ gpgcheck=0 enabled=1

A continuación, agregue la clave de firma del repositorio e instale el paquete nginx como se muestra.

# wget --quiet http://nginx.org/keys/nginx_signing.key && rpm --import nginx_signing.key
# yum install nginx

Después de instalar con éxito Nginx , inícielo, habilítelo para que se inicie automáticamente en el inicio del sistema y verifique si está funcionando.

---------- On Debian/Ubuntu ---------- 
$ sudo systemctl status nginx
$ sudo systemctl enable nginx
$ sudo systemctl status nginx

---------- On CentOS/RHEL ---------- 
# systemctl status nginx
# systemctl enable nginx
# systemctl status nginx

Si está ejecutando un firewall del sistema, debe abrir el puerto 80 (HTTP) , 443 (HTTPS) y 5000 (aplicación de nodo) que el servidor web escucha en las solicitudes de conexión del cliente.

---------- On Debian/Ubuntu ---------- 
$ sudo ufw allow 80/tcp
$ sudo ufw allow 443/tcp
$ sudo ufw allow 5000/tcp
$ sudo ufw reload

---------- On CentOS/RHEL ---------- 
# firewall-cmd --permanent --add-port=80/tcp
# firewall-cmd --permanent --add-port=443/tcp
# firewall-cmd --permanent --add-port=5000/tcp
# firewall-cmd --reload 

Paso 4: Configure Nginx como proxy inverso para la aplicación Nodejs

Ahora cree un archivo de configuración de bloque de servidor para su aplicación Node en /etc/nginx/conf.d/ como se muestra.

$ sudo vim /etc/nginx/conf.d/sysmon.conf 

Copie y pegue la siguiente configuración (cambie 192.168.43.31 con la IP del servidor y tecmint.lan con su nombre de dominio).

server {
    listen 80;
    server_name sysmon.tecmint.lan;

    location / {
        proxy_set_header   X-Forwarded-For $remote_addr;
        proxy_set_header   Host $http_host;
        proxy_pass         http://192.168.43.31:5000;
    }
}
}

Guarde los cambios y salga del archivo.

Finalmente, reinicie el servicio Nginx para efectuar los cambios recientes.

$ sudo systemctl restart nginx
OR
# systemctl restart nginx

Paso 5: Acceda a la aplicación Nodejs a través del navegador web

Ahora debería poder acceder a su aplicación Node sin proporcionar el puerto en el que está escuchando, en la URL: esta es una forma muy conveniente para que los usuarios accedan a ella.

http://sysmon.tecmint.lan 

Para que funcione su nombre de dominio de prueba, necesita configurar el DNS local usando el archivo /etc/hosts , abrirlo y agregar la línea debajo (recuerde cambiar 192.168.43.31 con la dirección IP de su servidor y tecmint.lan con su nombre de doamin como antes).

192.168.43.31 sysmon.tecmint.lan

¡Eso es todo! En este artículo, mostramos cómo configurar Nginx como un proxy inverso para las aplicaciones Nodejs. Utilice el formulario de comentarios a continuación para hacer preguntas o compartir sus opiniones sobre este artículo.