Nginx vs Apache: confronto testa a testa e come scegliere

Entrambi Nginx e Apache sono prodotti maturi con ricchi set di funzionalità e prestazioni elevate. Condividono origini open source comuni e puoi distribuirle su server Windows o Linux. 

Tuttavia, alcune differenze chiave potrebbero farti scegliere l'uno rispetto all'altro.

Ad esempio, Apache è una soluzione completa che supporta molte tecnologie e moduli diversi pronti all'uso. Al contrario, Nginx si affida a moduli di terze parti per espandere le proprie funzionalità.

Per vedere quale server web potrebbe soddisfare meglio le tue esigenze, approfondiamo queste opzioni.

Apache: il server Web originale dell'eroe

Apache

Creato nel 1995 da Robert McCool e originariamente chiamato "Apache HTTP Server Project" (da cui il nome), Apache è stato progettato per creare un server robusto di livello commerciale che può essere utilizzato gratuitamente, anche con modifiche. È diventato popolare molto rapidamente perché poteva essere eseguito su molti sistemi operativi diversi, da Unix a Windows.

A causa di questa popolarità di lunga data, considero Apache come il server web "eroe originale". È solido, ben documentato e supportato da una comunità aperta di sviluppatori sotto gli auspici della Apache Software Foundation.

Nginx - Titano di una nuova era

Nginx

Nginx (pronunciato come "Engine X") è un server HTTP e proxy inverso, un server proxy di posta e un server proxy TCP/UDP generico utilizzato per ospitare siti Web e applicazioni di tutte le dimensioni. È stato rilasciato pubblicamente per la prima volta dallo sviluppatore russo Igor Sysoev. L'obiettivo iniziale di Nginx era risolvere il problema C10K che Apache faticava a gestire. 

Leggi anche

Notevoli differenze tra Nginx e Apache

Architettura

Nginx e Apache condividono alcune somiglianze nella loro architettura di base. Ad esempio, entrambi utilizzano processi master-worker per migliorare le prestazioni. Hanno anche file di configurazione simili. Tuttavia, le differenze nello stile architettonico si traducono in una significativa variazione delle prestazioni ad ampio spettro.

Nginx ha un'architettura basata sugli eventi a misura di risorse che utilizza quantità di memoria piccole ma costanti sotto carico. Questa caratteristica lo rende ideale per ospitare siti web con livelli di traffico elevati o con picchi di traffico intermittenti.

L'architettura basata sui processi di Apache gestisce ogni connessione tramite un thread dedicato, che richiede più memoria. Tuttavia, si adatta meglio con carichi pesanti su macchine con più core CPU e RAM.

Utilizzo della memoria

Nginx è noto per le sue alte prestazioni e il basso consumo di risorse. D'altra parte, Apache può richiedere molta memoria, specialmente quando si eseguono più blocchi di server. Sebbene entrambi utilizzino la memoria per gestire le richieste HTTP, Nginx è più leggero. 

Il design di Apache significava che generava un thread per connessione e ogni thread avrebbe utilizzato una certa quantità di RAM. Con l'aumento del traffico, ciò potrebbe causare problemi poiché sarebbe necessaria più RAM, in particolare su server con meno memoria. Apache crea anche nuovi processi per ogni richiesta, anche dallo stesso utente.

Comparativamente, Nginx utilizza un processo per gestire più connessioni contemporaneamente. 

Gestione PHP

Perché entrambi questi server web funzionano principalmente con PHP, il modo in cui gestiscono il codice significa un notevole potenziale di prestazioni. Nginx non esegue PHP direttamente per impostazione predefinita. Passa invece la richiesta a PHP-FPM (FastCGI Process Manager), che gestisce la richiesta e invia una risposta a Nginx, che quindi restituisce il contenuto al client.

Poiché Nginx non attende una risposta da PHP-FPM per servire un'altra richiesta (in modo simile a come non attende una risposta dai client quando serve contenuto statico), Nginx può gestire più richieste contemporaneamente di quante Apache sarà in grado di gestire.

Apache usa un modulo chiamato mod_php per eseguire codice PHP. In questo modello, ogni volta che arriva una richiesta HTTP, Apache genera un nuovo processo o thread (a seconda di come è configurato) per gestire quella richiesta. Questo processo è anche responsabile della gestione di eventuali richieste PHP all'interno di tale richiesta.

Questo modello funziona, ma ha alcuni inconvenienti. Per prima cosa, generare un nuovo processo per ogni richiesta può essere impegnativo per il sistema, soprattutto se ci sono molte richieste simultanee. La generazione di un nuovo processo per ogni richiesta PHP all'interno di una richiesta è ancora più intensivo poiché il sistema operativo deve generare un interprete nuovo di zecca per ciascuno.

Come scegliere tra Nginx e Apache

Come puoi vedere, non c'è un chiaro vincitore tra questi colossi del server web. Dipende principalmente da cosa è necessario che il server web gestisca. 

Scegli Apache se: 

  • Stai gestendo un sito Web di media/grande scala che è destinato a crescere in modo significativo nel tempo e richiede moduli personalizzati.
  • Hai molti host virtuali o moduli abilitati nel tuo server e ne hai bisogno tutti all'avvio.
  • Stai gestendo un piccolo sito Web e non vuoi perdere tempo a imparare come configurare correttamente Nginx.

Usa Nginx se:

  • Stai eseguendo un sito Web su larga scala e desideri configurare facilmente la memorizzazione nella cache e il bilanciamento del carico allo stesso tempo senza preoccuparti delle limitazioni hardware.

Considerazioni finali su Nginx vs Apache

Il fatto che tu esegua Apache o Nginx dipenderà dalle tue esigenze e dall'hardware che stai utilizzando. Puoi utilizzare entrambe le opzioni per servire siti Web PHP. Ma c'è molto di più da considerare oltre a questo. 

Se hai un sito web semplice, potresti non notare alcuna differenza tra di loro. Ma se il tuo sito riceve più traffico e cresce, dovrai conoscere le prestazioni di ciascun server e la scalabilità sotto carico.

Leggi anche

Foto dell'autore

Articolo di Timothy Shim