Cos’è Nginx e come si usa - Web server, reverse proxy e (non proprio) application server

  

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é
🔗 Ti piace Techelopment? Dai un'occhiata al sito per tutti i dettagli!

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

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

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:

  1. Aprire il Prompt dei comandi
  2. Posizionarsi nella directory di Nginx
  3. Eseguire il comando:
nginx.exe

Se non vengono mostrati errori, Nginx è in esecuzione e sarà raggiungibile all’indirizzo:

http://localhost

Configurazione

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

L’opzione -s nei comandi di Nginx significa signal (segnale).

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