back to top

NGinx: cos’è, come funziona e perché conviene usarlo

Prima di parlare di NGinx, delle sue caratteristiche e del perché sceglierlo al posto di altri Web server potrebbe rappresentare una soluzione ideale per i propri progetti online, è opportuno fare riferimento al cosiddetto problema C10k, numeronimo che funge da abbreviazione di “concurrently handling ten thousand connections” e significa sostanzialmente “gestire simultaneamente 10 mila connessioni”.

Il problema C10k e la nascita di NGinx

A livello tecnico il C10k è un problema di ottimizzazione dei socket di rete, dove per socket s’intende una componente software che permette di scambiare dati tra host remoti, quindi attraverso una rete, o tra processi attivati localmente.

Nel caso specifico l’ottimizzazione non riguarda le performance e la capacità di fornire quanto più velocemente possibile delle risposte alle richieste formulate all’interno di un network, ma la possibilità di gestire un numero elevato di client in contemporanea. In tal senso un sistema può essere definito efficiente quando è in grado di schedulare efficacemente le connessioni, indipendentemente dal tempo impiegato per portare a termine questo compito.

Quello del C10k è un problema di vecchia data e nel corso del 2004 il programmatore russo Igor Sysoev, insoddisfatto da soluzioni diffusamente utilizzate come Apache, lanciò la prima versione pubblica di NGinx con l’obbiettivo di fornire agli amministratori di sistema un Web server Open Source che potesse risolverlo.

La caratteristica più interessante di NGinx dal punto di vista della gestione delle connessioni risiede nel modo in cui esso presiede al controllo dei processi, essi infatti funzionano sulla base di un modello di comunicazione asimmetrica in cui abbiamo un processo principale, detto processo “master”, che controlla un numero variabile di sotto-processi denominati “slave” o, in modo più politicamente corretto, “worker”. NGinx è stato sviluppato in modo da permettere al master di mantenere attivi i sotto-processi che a loro volta presiedono all’elaborazione delle connessioni, tale procedura viene effettuata in modalità asincronaquindi un sotto-processo può eseguire in simultanea più richieste di connessione senza che vi sia la necessità di bloccare le altre per gestire quella corrente.

Il fatto di non dover generare un nuovo processo per ogni richiesta garantisce un livello di concorrenza elevata e nel contempo un consumo di memoria contenuto bypassando il problema C10k.

NGinx: caratteristiche tecniche

NGinx è un Web server estremamente snello ma completo dal punto di vista delle funzionalità. In esso troviamo ad esempio il supporto per il protocollo di Rete IPv6 così come per i protocolli di messaggistica WebSocket. Quest’ultima caratteristica consente di gestire le comunicazioni asincrone e full-duplex (quindi bidirezionali e in contemporanea) su connessione TCP (Transmission Control Protocol), vengono così superati i limiti delle connessioni HTTP con cui le trasmissioni dei dati sono invece half-duplex e quindi unidirezionali.

Tra le altre feature di NGinx è possibile segnalare anche le funzionalità integrate per il load balancing, indispensabile per la gestione di sessioni ad alto traffico, e la possibilità di agire come reverse proxy.

Il fatto di poter utilizzare NGinx come reverse proxy offre ulteriori garanzie dal punto di vista del bilanciamento dei carichi di lavoro perché una configurazione di questo genere consente di collegare un medesimo URL con più server all’interno di una VPN (Virtual Private Network), permettendo di distribuire le richieste su di essi. Non andrebbero poi ignorati i vantaggi in termini di performance derivanti dal caching, quando agisce come reverse proxy NGinx è in infatti in grado allocare temporaneamente le risposte inviate dai server e di riutilizzarle per non dover elaborare nuovamente le richieste. A ciò si aggiunga il supporto per la compressione dei dati, sia in entrata che in uscita, che determina un ulteriore beneficio per le prestazioni.

Per quanto riguarda la sicurezza, il Web server consente inoltre di utilizzare connessioni crittografate, con la possibilità di archiviare i certificati SSL (Secure Sockets Layer), di filtrare i package veicolati sulla base di direttive definite dall’amministratore di sistema, di installare servizi che operano in background come per esempio gli antivirus e, sempre tramite reverse proxy, di anonimizzare i server di destinazione delle richieste.

NGinx è disponibile per l’installazione su Linux, macOS e Windows, ma non sempre con gli stessi risultati in termini di prestazioni e feature. Analizziamo le diverse procedure per l’integrazione del Web server nel proprio sistema.

Installazione di NGinx su Linux

Per l’installazione sulle distribuzioni Linux è possibile proporre il caso di Ubuntu LTS 20.04, che è una versione LTS (Long Term Support), con il vantaggio di poter replicare le operazioni descritte su tutte le derivate del progetto di Canonical. Ci si autentichi quindi attraverso un utente che abbia il privilegio di lanciare il comando sudo (non è necessario impersonare il root) e si lanci l’istruzione:

$ sudo apt update

per aggiornare l’indice dei package locali, Ubuntu dispone infatti di un repository di default da cui prelevare il package di NGinx.

Una volta concluso l’aggiornamento è possibile digitare il comando seguente per installare NGinx e le sue dipendenze:

$ sudo apt install nginx

nonché verificare lo status del Web server tramite l’istruzione:

$ systemctl status nginx

Se come atteso NGinx dovesse essere effettivamente attivo, l’output conterrà la notifica “Active: active running” che ne certifica l’avvio e il funzionamento.

Verificare che Nginx sia in esecuzione

Un ulteriore controllo può essere effettuato via browser Web, aprendo ad esempio Firefox e digitando la stringa localhost nella barra degli indirizzi. Se tutto dovesse essere andato per il meglio verrà visualizzata la schermata di benvenuto di NGinx:

Verificare il funzionamento di Nginx mediante il browser

Il processo del Web server può essere arrestato in qualsiasi momento tramite il comando

$ sudo systemctl stop nginx

o avviato con:

$ sudo systemctl start nginx

Installazione su macOS con Homebrew

Un metodo molto semplice di installare NGinx su macOS è quello di sfruttare il gestore di pacchetti software Homebrew che è una soluzione gratuita e Open Source integrabile rapidamente nel proprio sistema tramite il relativo repository di GitHub e il comando:

% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)

Fatto questo è possibile passare immediatamente all’installazione del Web server digitando l’istruzione:

% brew install nginx

Terminato anche questo passaggio si può lanciare il processo di esecuzione di NGinx con il comando:

% sudo brew services start nginx

L’utilizzo di sudo all’interno dell’istruzione potrebbe anche essere omesso ma in questo caso è utile sfruttarlo perché consente al Web server di accedere in modalità predefinita dalla porta 80 che NGinx utilizzerà da questo momento in poi per attendere le chiamate.

Per verificare il successo dell’installazione è sufficiente digitare l’URL:

http://localhost

nella barra degli indirizzi del browser e visualizzare la schermata di benvenuto di NGinx.

Installazione di NGinx su Windows

Come specificato dalla stessa community che presiede all’implementazione del Web server, NGinx non è una soluzione ottimizzata per Windows e quando presente in questo sistema operativo le sue performance risultano molto più limitate rispetto ai risultati che si potrebbero ottenere in Linux.

La release di NGinx per le piattaforme di Microsoft sfrutta le API (Application Programming Interface) Win32 e non il layer di emulazione Cygwin che consentirebbe a Windows di effettuare alcune operazioni in modo simile a quanto accadrebbe con sistemi Unix like come le distribuzioni Linux. Per processare le connessioni vengono così utilizzati unicamente i metodi select() e poll(), e non epoll(), con la conseguenza di sacrificare gran parte della scalabilità e dell’efficienza che il Web server potrebbe garantire.

In Windows sono poi assenti alcune feature come il supporto a Pearl, il modulo GeoIP nonché i filtri XSLT (eXtensible Stylesheet Language Transformations) e per le immagini, tutte carenze che rendono la variante per Windows sostanzialmente una versione beta con limitazioni.

È comunque possibile scaricare NGinx per Windows dal sito ufficiale del progetto, una volta effettuato il download e scompattato l’archivio compresso così ottenuto si ha a disposizione una directory dotata della seguente struttura:

NGinx per Windows

Per avviare il processo di NGinx non si deve fare altro che cliccare 2 volte sull’eseguibile “nginx.exe” o aprire il Prompt dei comandi e digitare l’istruzione:

C:nginx> start nginx

Chiaramente il percorso di partenza cambierà a seconda della posizione in cui è stato scaricato il package del Web server.

Pubblicitร 
Claudio Garau
Claudio Garau
Web developer, programmatore, Database Administrator, Linux Admin, docente e copywriter specializzato in contenuti sulle tecnologie orientate a Web, mobile, Cybersecurity e Digital Marketing per sviluppatori, PA e imprese.

Leggi anche...

ERR_TOO_MANY_REDIRECTS: cos’è e come risolvere l’errore

L'errore ERR_TOO_MANY_REDIRECTS si verifica quando un browser tenta di...

Lucchetto HTTPS barrato di rosso: cosa significa e come risolvere

Il lucchetto HTTPS barrato di rosso mostrato dal browser...

Risolvere l’errore Bad Request … Size of a request header field exceeds server limit

L'errore "Bad Request: Your browser sent a request that...

Errore 410: cos’è, quando si verifica e come risolvere (se necessario)

Il codice di stato HTTP 410 (o “Gone”), più...

Errore 451 Unavailable For Legal Reasons: cos’è e quando si verifica

L'errore HTTP 451 Unavailable For Legal Reasons รจ un...

Mettere un sito in manutenzione con .htaccess

Sono tanti i motivi per cui si puรฒ avere...
Pubblicitร