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.