![]() |
Nginx (si pronuncia “engine-x”) è uno dei software più utilizzati al mondo per la gestione del traffico web. Nato nel 2004 per risolvere problemi di scalabilità, oggi è alla base di moltissimi siti ad alto traffico come Netflix, GitHub e Cloudflare.
| https://nginx.org/ |
In questo articolo vedremo:
- cos’è Nginx
- a cosa serve e come si usa
- se può essere considerato un application server oppure solo un web server, e perché
Cos’è Nginx
Nginx è principalmente un web server e reverse proxy, progettato per gestire un numero elevatissimo di connessioni concorrenti con un consumo di risorse molto ridotto.
A differenza di web server più tradizionali (come Apache nel suo modello classico), Nginx utilizza un’architettura event-driven e non bloccante, che lo rende estremamente efficiente in scenari ad alto traffico.
In sintesi, Nginx può svolgere diversi ruoli:
- Web server per contenuti statici
- Reverse proxy
- Load balancer
- HTTP cache
- Termination SSL/TLS
A cosa serve Nginx
1. Web server per contenuti statici
Nginx è eccellente nel servire file statici come:
- HTML
- CSS
- JavaScript
- immagini e video
Grazie alla sua architettura, riesce a servire migliaia di richieste simultanee con latenze molto basse.
2. Reverse proxy
Uno degli utilizzi più comuni di Nginx è come reverse proxy davanti a uno o più application server (ad esempio Node.js, Java Spring, PHP-FPM, Python Django).
In questo scenario:
- Nginx riceve le richieste HTTP
- le inoltra al backend appropriato
- restituisce la risposta al client
Questo permette di:
- nascondere l’infrastruttura interna
- migliorare sicurezza e performance
- gestire facilmente più applicazioni dietro lo stesso dominio
3. Load balancer
Nginx può distribuire il traffico tra più backend usando diverse strategie:
- round-robin
- least connections
- hashing
È una soluzione molto usata per aumentare disponibilità e scalabilità delle applicazioni.
4. Terminazione SSL/TLS
Nginx può gestire la crittografia HTTPS:
- certificati SSL/TLS
- rinnovo automatico (es. con Let’s Encrypt)
In questo modo i backend possono comunicare in HTTP semplice, riducendo complessità e carico.
Come si usa Nginx
Installazione su Linux
Su sistemi Linux è disponibile nei repository ufficiali:
sudo apt install nginx
Configurazione di base
Il file di configurazione principale è:
/etc/nginx/nginx.conf
Le configurazioni dei siti sono spesso in:
/etc/nginx/sites-available/
/etc/nginx/sites-enabled/
Esempio semplice di server block
server {
listen 80;
server_name example.com;
location / {
root /var/www/html;
index index.html;
}
}
server {
listen 80;
server_name example.com;
location / {
root /var/www/html;
index index.html;
}
}Esempio come reverse proxy
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}Avvio e comandi di Nginx su Linux
Su sistemi Linux, Nginx viene generalmente installato come servizio di sistema e gestito tramite systemd. Questo consente di avviare, fermare e controllare Nginx in modo standardizzato e integrato con il sistema operativo.
Avvio del servizio
Per avviare Nginx:
sudo systemctl start nginx
Per verificare lo stato del servizio:
sudo systemctl status nginx
Una volta avviato, Nginx sarà raggiungibile all’indirizzo:
http://localhost
Avvio automatico all’avvio del sistema
Per abilitare l’avvio automatico di Nginx al boot:
sudo systemctl enable nginx
Per disabilitarlo:
sudo systemctl disable nginx
Arresto e riavvio del servizio
Per fermare Nginx:
sudo systemctl stop nginx
Per riavviare Nginx:
sudo systemctl restart nginx
Ricaricare la configurazione senza downtime
Dopo aver modificato i file di configurazione, è possibile ricaricare Nginx senza interrompere le connessioni attive:
sudo systemctl reload nginx
Questo comando invia internamente un segnale di reload al processo master di Nginx.
Test della configurazione
Prima di ricaricare o riavviare Nginx, è buona pratica verificare la correttezza della configurazione:
sudo nginx -t
Se la configurazione è valida, Nginx restituirà un messaggio di conferma e potrà essere ricaricato in sicurezza.
Installazione di Nginx su Windows
Anche se Nginx è nato e viene utilizzato principalmente su sistemi Unix/Linux, è possibile installarlo e usarlo anche su Windows, soprattutto per scopi di sviluppo, test o ambienti locali.
Download
Nginx per Windows è disponibile sotto forma di archivio compresso. Dopo aver scaricato il pacchetto ufficiale, è sufficiente estrarlo in una directory a scelta, ad esempio:
C:\nginx
Struttura delle directory
Una volta estratto, la struttura principale sarà simile a questa:
nginx/
├── conf/
├── html/
├── logs/
└── nginx.exe
- conf: contiene i file di configurazione (nginx.conf)
- html: directory predefinita per i contenuti statici
- logs: file di log di accesso ed errore
- nginx.exe: eseguibile principale
Avvio di Nginx
Per avviare Nginx su Windows:
- Aprire il Prompt dei comandi
- Posizionarsi nella directory di Nginx
- Eseguire il comando:
nginx.exe
Se non vengono mostrati errori, Nginx è in esecuzione e sarà raggiungibile all’indirizzo:
http://localhostConfigurazione
Il file di configurazione principale si trova in:
conf/nginx.conf
La sintassi e la struttura dei file di configurazione su Windows sono identiche a quelle su Linux, il che rende semplice il passaggio tra ambienti diversi.
Limiti di Nginx su Windows
È importante sottolineare che l’uso di Nginx su Windows presenta alcune limitazioni:
- prestazioni inferiori rispetto a Linux
- mancanza di alcune ottimizzazioni di basso livello
- non consigliato per ambienti di produzione
Per questi motivi, Nginx su Windows è ideale per sviluppo e test, mentre in produzione è fortemente consigliato l’utilizzo su sistemi Linux.
Nota sulle differenze tra Linux e Windows
Su Linux, Nginx offre le migliori prestazioni e tutte le funzionalità avanzate per ambienti di produzione. L’utilizzo di systemctl è il metodo consigliato, mentre i comandi nginx -s sono più comuni in contesti avanzati o di troubleshooting.
Flag -s
Serve per inviare un segnale al processo Nginx già in esecuzione, invece di avviarne uno nuovo. Ad esempio:
“Invia il segnale stop al processo Nginx attualmente in esecuzione”
Nginx utilizza un processo master, che riceve questi segnali e li propaga ai worker process.
Uso dei comandi nginx -s su Linux
In alternativa a systemctl, è possibile usare direttamente i comandi nativi di Nginx (con l’opzione -s):
- Arresto immediato:
sudo nginx -s stop - Arresto graduale:
sudo nginx -s quit - Ricaricare la configurazione:
sudo nginx -s reload - Riapertura dei file di log:
sudo nginx -s reopen
Uso dei comandi nginx -s su Windows
Alcuni comandi utili da eseguire sempre dalla directory di Nginx:
- Arrestare Nginx:
nginx -s stop - Ricaricare la configurazione:
nginx -s reload - Terminare forzatamente:
nginx -s quit
Nginx è un application server?
Risposta breve: no, Nginx non è un application server.
Perché Nginx non è un application server
Un application server:
- esegue codice applicativo
- gestisce logica di business
- fornisce runtime (JVM, Node.js, PHP, ecc.)
Esempi:
- Tomcat / WildFly (Java)
- Node.js
- .NET Kestrel
- PHP-FPM
Nginx non esegue codice applicativo e non fornisce un runtime per linguaggi di programmazione general-purpose.
Perché spesso viene confuso con un application server
Nginx può:
- instradare richieste dinamiche
- comunicare con processi applicativi
- usare moduli (es. FastCGI, uWSGI)
Questo lo rende parte integrante dell’architettura applicativa, ma non lo trasforma in un application server.
Esempi:
- con PHP → Nginx + PHP-FPM
- con Java → Nginx + Tomcat
- con Node.js → Nginx + Express
In tutti questi casi, Nginx è il front-end HTTP, mentre l’application server è il backend.
Quindi cos’è davvero Nginx?
Possiamo definirlo come:
Un web server e reverse proxy ad alte prestazioni, specializzato nella gestione del traffico HTTP, non nell’esecuzione della logica applicativa.
È uno strato fondamentale dell’infrastruttura moderna, ma lavora insieme agli application server, non al loro posto.
Conclusione
Nginx è uno strumento estremamente potente e versatile:
- velocissimo nel servire contenuti statici
- eccellente come reverse proxy e load balancer
- essenziale per architetture scalabili
Tuttavia, non è un application server, perché non esegue codice applicativo né fornisce un ambiente di runtime.
Capire questa distinzione aiuta a progettare architetture più solide, scalabili e manutenibili.
Follow me #techelopment
Official site: www.techelopment.it
facebook: Techelopment
instagram: @techelopment
X: techelopment
Bluesky: @techelopment
telegram: @techelopment_channel
whatsapp: Techelopment
youtube: @techelopment
