Ricerca nel sito web

Come configurare Nginx come proxy inverso per l'app Nodejs


Nodejs è un framework JavaScript open source gratuito, leggero, scalabile ed efficiente, basato sul motore JavaScript V8 di Chrome e utilizza un modello I/O non bloccante e basato sugli eventi. Nodejs è ormai ovunque ed è diventato così popolare per lo sviluppo di software da siti Web, app Web ad app di rete e altro ancora.

Nginx è un server HTTP open source ad alte prestazioni, un software di bilanciamento del carico e proxy inverso. Ha un linguaggio di configurazione semplice che lo rende facile da configurare. In questo articolo mostreremo come configurare Nginx come proxy inverso per le applicazioni Nodejs.

Leggi anche: La guida definitiva per proteggere, rafforzare e migliorare le prestazioni del server Web Nginx

Nota: se il tuo sistema è già in esecuzione con Nodejs e NPM e la tua app è in esecuzione su una determinata porta , vai direttamente al passaggio 4.

Passaggio 1: installazione di Nodejs e NPM in Linux

L'ultima versione di Node.js e NPM è disponibile per l'installazione dal repository ufficiale delle distribuzioni binarie NodeSource Enterprise Linux, Fedora, Debian e Ubuntu, gestito dal sito Web Nodejs e dovrai aggiungerlo al tuo sistema per poter installare gli ultimi pacchetti Nodejs e NPM come mostrato.

Su 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

Su CentOS/RHEL e 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 -

Passaggio 2: creazione di un'applicazione Nodejs

A scopo dimostrativo, creeremo un'applicazione di esempio chiamata “sysmon”, che verrà eseguita sulla porta 5000 come mostrato.

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

Copia e incolla il seguente codice nel file server.js (sostituisci 192.168.43.31 con l'IP del tuo server).

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}/`);
});

Salvare il file ed uscire.

Ora avvia l'applicazione del tuo nodo utilizzando il seguente comando (premi Ctrl+x per terminarla).

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

Ora apri un browser e accedi alla tua applicazione all'URL http://198.168.43.31:5000.

Passaggio 3: installa Nginx Reverse Proxy in Linux

Installeremo l'ultima versione di Nginx dal repository ufficiale, come mostrato di seguito.

Su Debian/Ubuntu

Crea un file chiamato /etc/apt/sources.list.d/nginx.list e aggiungivi le seguenti righe.

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

Successivamente, aggiungi la chiave di firma del repository, aggiorna l'indice del pacchetto di sistema e installa il pacchetto nginx come segue.

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

Su CentOS/RHEL e Fedora

Crea un file denominato /etc/yum.repos.d/nginx.repo e incolla una delle configurazioni seguenti.

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: a causa delle differenze tra CentOS e RHEL, è necessario sostituire $releasever con 6 (per 6.x) o 7 (per 7.x), a seconda della versione del sistema operativo.

Successivamente, aggiungi la chiave di firma del repository e installa il pacchetto nginx come mostrato.

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

Dopo aver installato con successo Nginx, avvialo, abilitalo all'avvio automatico all'avvio del sistema e controlla se è attivo e funzionante.

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

Se utilizzi un firewall di sistema, devi aprire la porta 80 (HTTP), 443 (HTTPS) e 5000 (app Node), su cui il server Web è in ascolto per le richieste di connessione del client.

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

Passaggio 4: configura Nginx come proxy inverso per l'applicazione Nodejs

Ora crea un file di configurazione del blocco server per la tua app Node in /etc/nginx/conf.d/ come mostrato.

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

Copia e incolla la seguente configurazione (cambia 192.168.43.31 con l'IP del tuo server e tecmint.lan con il tuo nome di 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;
    }
}

Salvare le modifiche ed uscire dal file.

Infine, riavvia il servizio Nginx per rendere effettive le modifiche recenti.

sudo systemctl restart nginx
OR
systemctl restart nginx

Passaggio 5: accedi all'applicazione Nodejs tramite browser Web

Ora dovresti essere in grado di accedere alla tua app Node senza fornire la porta su cui è in ascolto, nell'URL: questo è un modo molto conveniente per gli utenti di accedervi.

http://sysmon.tecmint.lan 

Affinché il tuo nome di dominio di prova funzioni, devi impostare il DNS locale utilizzando il file /etc/hosts, aprirlo e aggiungere la riga seguente al suo interno (ricordati di modificare 192.168.43.31 con l'IP del tuo server e tecmint.lan con il tuo nome di dominio come prima).

192.168.43.31 sysmon.tecmint.lan

È tutto! In questo articolo abbiamo mostrato come configurare Nginx come proxy inverso per le applicazioni Nodejs. Utilizza il modulo di feedback qui sotto per porre domande o condividere le tue opinioni su questo articolo.