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โ.
Indice
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.
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:
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:
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.