Come ospitare app Web utilizzando il proxy inverso Nginx su Ubuntu
Avendo oltre 10 anni di esperienza di lavoro con i sistemi Linux, posso dire che impostare un proxy inverso con Nginx è uno dei modi più comuni ed efficienti per gestire il traffico verso le tue applicazioni web.
Un proxy inverso funge da server intermedio che inoltra le richieste dei client al server backend appropriato ed è uno strumento essenziale per il bilanciamento del carico, la sicurezza e le prestazioni.
In questa guida ti guiderò attraverso i passaggi per configurare Nginx come proxy inverso su Ubuntu 24.04, insieme a un esempio di hosting di una semplice applicazione web dietro Nginx.
Prerequisiti
Prima di iniziare, assicurati di avere quanto segue:
- Server Ubuntu 24.04 attivo e funzionante (puoi utilizzare un VPS o un server fisico).
- Privilegi root o sudo per eseguire attività di amministrazione del sistema.
- Un'applicazione web di esempio in esecuzione su un server backend (per questo esempio utilizzeremo un'app
Node.js
di base). - Conoscenza di base dei comandi Linux e dei concetti di rete.
Passaggio 1: installa Nginx su Ubuntu 24.04
Innanzitutto, dobbiamo installare il server web Nginx dai repository Ubuntu predefiniti utilizzando il seguente comando.
sudo apt update
sudo apt install nginx
Una volta completata l'installazione, puoi controllare lo stato di Nginx per assicurarti che sia in esecuzione:
sudo systemctl status nginx
Se Nginx non è in esecuzione, avvialo con il comando:
sudo systemctl start nginx
Per assicurarti che Nginx si avvii automaticamente all'avvio:
sudo systemctl enable nginx
Se hai un firewall UFW abilitato sul tuo server, assicurati che il traffico HTTP (porta 80) sia consentito.
sudo ufw allow 'Nginx Full'
sudo ufw enable
Passaggio 2: configura l'applicazione Web backend
In questo esempio, utilizzeremo una semplice applicazione Node.js
come server backend, che ascolterà sulla porta 3000
.
Per prima cosa installa Node.js
e npm
sul tuo server:
sudo apt install nodejs npm
Ora creiamo una semplice applicazione web Node.js
:
sudo mkdir /var/www/myapp
cd /var/www/myapp
Inizializza l'app Node.js
:
sudo npm init -y
Installa Express, un semplice framework web per Node.js
:
sudo npm install express
Crea un file app.js
all'interno della directory /var/www/myapp
con il seguente contenuto:
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Hello, this is a backend app!');
});
app.listen(port, () => {
console.log(`App running on http://localhost:${port}`);
});
Avvia la tua applicazione Node.js
.
sudo node app.js
La tua applicazione web di backend è ora in esecuzione su http://localhost:3000
e puoi verificarlo accedendo al seguente indirizzo nel tuo browser e dovresti vedere il messaggio "Ciao, questo è un'app di backend!" messaggio.
http://your-server-ip:3000
Passaggio 3: configura Nginx come proxy inverso
Ora configuriamo Nginx per inoltrare le richieste dal mondo esterno al backend Node.js
in esecuzione sulla porta 3000
.
Innanzitutto, crea un nuovo file di configurazione nella directory sites-available
:
sudo nano /etc/nginx/sites-available/myapp
Nel nuovo file, aggiungi la seguente configurazione per indicare a Nginx di inoltrare le richieste HTTP in entrata al server backend in esecuzione sulla porta 3000:
server {
listen 80;
server_name your_domain_or_ip
; location / { proxy_pass http://localhost:3000; # Forward requests to your backend server proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
Dopo aver salvato la configurazione, crea un collegamento simbolico alla directory sites-enabled
per abilitare questa configurazione:
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
È importante assicurarsi che non vi siano errori di sintassi prima di riavviare Nginx:
sudo nginx -t
sudo systemctl restart nginx
Ora apri il browser e accedi all'indirizzo IP pubblico o al dominio del tuo server (ad esempio, http://your-server-ip
o http://your_domain
).
Dovresti visualizzare il messaggio "Ciao, questa è un'app backend!", il che significa che Nginx sta inoltrando con successo le richieste alla tua applicazione Node.js
backend.
Per connessioni sicure, puoi configurare SSL con Let's Encrypt.
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your_domain_or_ip
Conclusione
In questa guida, abbiamo configurato Nginx come proxy inverso per inoltrare le richieste HTTP a un'applicazione web Node.js
di backend in esecuzione su localhost:3000
su un server Ubuntu 24.04.
Seguendo questi passaggi, hai imparato i concetti di base del reverse proxying con Nginx e come ospitare una semplice applicazione web dietro Nginx. Con questa configurazione, puoi facilmente espanderla ad applicazioni più complesse e ridimensionare la tua infrastruttura secondo necessità.