Búsqueda de sitios web

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


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

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

Lea también: La guía definitiva para proteger, reforzar y mejorar el rendimiento del servidor web Nginx

Nota: si su sistema ya se ejecuta con Nodejs y NPM y su aplicación se ejecuta en un puerto determinado , vaya directamente al Paso 4.

Paso 1: Instalar Nodejs y NPM en Linux

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

En Debian/Ubuntu

---------- 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

En CentOS/RHEL y Fedora

---------- 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: crear una aplicación Nodejs

Para fines de demostración, crearemos una aplicación de muestra 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 el proxy inverso Nginx en Linux

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

En Debian/Ubuntu

Cree un archivo llamado /etc/apt/sources.list.d/nginx.list y agréguele 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 del paquete del 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

En CentOS/RHEL y Fedora

Cree un archivo llamado /etc/yum.repos.d/nginx.repo y pegue una de las configuraciones siguientes.

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

Nota: Debido a las diferencias entre CentOS y RHEL, es necesario reemplazar $releasever por 6 (para 6.x) o 7 (para 7.x), dependiendo de la versión de su sistema operativo.

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 Nginx con éxito, inícielo, habilítelo para que se inicie automáticamente al iniciar el sistema y verifique si está en funcionamiento.

---------- 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). en el que el servidor web escucha 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: Configurar 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 

Copia y pega la siguiente configuración (cambia 192.168.43.31 por la IP de tu servidor y tecmint.lan por tu 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 mucho más conveniente para que los usuarios accedan a ella.

http://sysmon.tecmint.lan 

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

192.168.43.31 sysmon.tecmint.lan

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