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.

Pubblicitร 

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.

Altri contenuti interessanti

Pubblicitร 

Potrebbero interessarti queste guide

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ร