Tradizionalmente quando si parla di web server viene subito in mente Apache. Apache è un web server maturo con una lunga storia alle spalle. Negli ultimi anni, tuttavia, un nuovo web server è apparso sul mercato a contendere la leadership al decano Apache. Il maggior problema di Apache sta nel fatto che il suo design di base nasce in un periodo in cui il traffico sul web non rappresentava ancora un problema.

I siti dinamici erano pochi, e per lo più venivano gestite pagine HTML statiche. La banda a disposizione era poca, e gli utenti ironicamente traducevano l’acronimo WWW come World-Wide Wait. Ma le cose erano destinate a cambiare in fretta. In pochi anni l’infrastruttura del web ha compiuto giganteschi passi in avanti, la banda a disposizione si è centuplicata con la diffusione della fibra ottica, i siti dinamici sono esplosi e con essi si è assististito ad un aumento vertiginoso del traffico di rete.

Nel frattempo Apache si è evoluto, ma ci si è accorti che la sua gestione del più popolare linguaggio lato server sul web, ossia PHP, non è cambiata molto nel corso degli anni. Nonostante PHP, giunto alla versione 7, sia di gran lunga più performante delle versioni precedenti, tuttavia i problemi legati alla performance restano seri e si ripercuotono su Apache.

Il collo di bottiglia maggiore è rappresentato dalla gestione di MySQL da parte di PHP: Apache è costretto ad impegnare seriamente la memoria del server quando ci sono troppe query simultanee.

Infatti PHP deve aspettare ogni volta che il database restituisca i risultati della query, bloccando l’esecuzione del resto del codice. Di conseguenza Apache è costretto da parte sua ad avviare più sottoprocessi per gestire la situazione, consumando grandi quantità di memoria. nginx ha invece una gestione molto più efficiente della memoria e non raggiunge questi picchi di consumo. nginx non gestisce PHP tramite un modulo: semplicemente, quando incontra un file PHP reindirizza la sua gestione direttamente all’interprete PHP scelto, come ad esempio PHP-FPM, fungendo da proxy. Di conseguenza nginx è molto più efficiente e performante rispetto ad Apache quando si tratta di gestire siti ad elevato traffico.

nginx per design è basato sugli eventi e questa sua caratteristica lo ha reso il partner ideale per gestire le applicazioni sviluppate in Node.jsIn questo caso nginx viene usato sia come proxy, ossia per riscrivere un URL come https://192.168.1.100:3000 in https://myapp.com, sia come gestore per le risorse statiche di un’app. In questo modo le app in Node.js diventano estremamente performanti, perché Node andrà a gestire la logica dell’applicativo, mentre nginx servirà le immagini, i file CSS e JavaScript e più in generale tutte le risorse statiche.

E in questo senso abilitando la compressione e la cache su nginx per questo tipo di risorse si ottengono prestazioni di primissimo livello quando si effettuano test di benchmark sulla performance come il celebre Pagespeed di Google.

Il supporto ad nginx da parte dei provider è cresciuto notevolmente nel corso degli ultimi anni e già ora molti pannelli di controllo, come Plesk, permettono di gestire nginx tramite interfaccia grafica. nginx è ancora relativamente giovane e davanti a sé ha una lunga e promettente strada da percorrere.