Apache vs. NGINX: analisi e differenze

Apache vs. NGINX: analisi e differenze

nginx è un web server sviluppato originariamente da Igor Sysoev per il portale della Ramblermedia, diffusosi poi come software open source: da qui la sua affermazione progressiva, negli ultimi anni, arrivando ad essere il terzo server a livello di popolarità dopo Apache e IIS (fonte). Un sito su cui sto lavorando in questi giorni – CNT – ne fa uso, ed è questo il motivo che mi ha spinto ad approfondire l’argomento che ho trovato decisamente intrigante.

Perchè nginx e non Apache?

Per quanto sono riuscito a capire in questa prima fase, il sito in questione ne trae un grosso giovamento in termini di prestazioni rispetto a numerosi visitatori: è il caso di valutare, quindi, nel dettaglio cosa differenzi nginx dal più noto Apache, e perchè dovremmo scegliere l’uno o l’altro (e a che prezzo, soprattutto). Si tenga conto, inoltre, che nginx ha permesso a wordpress.com di aggirare un problema di sovraccarico di connessioni concorrenti, noto come C10k, che affliggeva il “cugino” Apache.

Partiamo quindi dalle definizioni di base, per poi estendere il discorso nella maniera più semplice e chiara anche per i non esperti.

Apache, noto per esteso col nome Apache HTTP Server, ha storicamente giocato un ruolo chiave per lo sviluppo del World Wide Web: nel 2009 era il primo web server ad essere installato per oltre 100 milioni di siti web (fonte). Apache possiede, parlando in termini generali, maggiori funzionalità rispetto a nginx, ma questo non lo rende automaticamente migliore, anzi: esistono contesti nei quali nginx funziona meglio, qualora venga usato ad esempio per servire file statici. Apache possiede un enorme limite per quanto riguarda la gestione della memoria, ed nginx cerca quindi di sopperire questo aspetto. Quando paro di file statici, cmq, non mi riferisco in questo caso a siti web statici, almeno non esclusivamente, ma (per estensione) anche a quelli che utilizzino massivamente la cache: in effetti il sito sopracitato sfrutta in modo piuttosto “presente” un plugin di cache, mettendo il server in condizione (mediante nginx) di risparmiare tempo senza elaborare “a vuoto” lato server, e mandando i file (quando possibile) direttamente al client interessato.

Secondo il blog barryonwordpress, inoltre, nginx sembra essere l’unico webserver con un load balancer capace di gestire senza errori fino a 8000 richieste al secondo, il che confermerebbe che nginx sua perfetto se il vostro blog in WordPress o Drupal, per intenderci, abbia moltissimi visitatori ed altrettanti “picchi” di visite (tipici dei siti adult e di alcuni portali di news). Situazione che si verifica analogamente nel caso in cui possa servirvi un server – scusate per questo terribile gioco di parole – che faccia da reverse proxy (cioè da “filtro” tra il server ed il client, ad esempio per scansare attacchi informatici) oppure come load balancer: attenzione, pero’, che questa affermazione non deve essere fraintesa, perchè tali funzioni sono supportate anche da Apache.

Ma allora perchè non usare tutti nginx, salutando cordialmente Apache che tanto ha fatto per noi? Il problema, come vedremo tra un attimo, è che nginx non è compatibile con le funzioni di Apache che diamo usualmente per scontate (mod_pagespeed, mod_security, mod_rewrite, …), per cui costringe il sistemista ad un refactor notevole della configurazione del sito.

Una cosa importante da capire, comunque, è che Nginx possiede un’architettura event-based ovvero, detta in modo spartano, non necessita di effettuare la creazione di tanti processi per quante richieste siano in esecuzione, ottimizzando l’uso di memoria al contrario di Apache che, in certi casi, può provocare problemi di memoria su WordPress o altri CMS. Apache usa infatti un thread per connessione, mentre nginx lavora in modo asincrono con thread non bloccanti, il che riduce l’uso di RAM ed ottimizza l’esecuzione dei processi. nginx, comunque, ha una sintassi interna differente e non è adatto in ambienti di hosting condiviso, mentre è idealmente molto più agevole da gestire nel caso in cui esista un singolo accesso mediante FTP (VPS o dedicati).

A tal proposito, mentre molti frettolosi potrebbero persuadersi di cambiare Apache con nginx, esiste un controesempio piuttosto clamoroso: immaginiamo uno scenario in cui nginx debba far funzionare WordPress. Ebbene, qualsiasi impostazione del file htaccess sarà ignorata, perchè il server di Sysoev non legge i file htaccess (fonte), e per attivare i comunissimi permalink bisogna ricorrere alla seguente configurazione alternativa:

#######################
# Permalinks

if (!-e $request_filename) {
  rewrite ^.*$ /index.php last;
}

oppure

#######################
# Permalinks

try_files $uri $uri/ /index.php?$args;

dopo aver caricato nella home del vostro sito un file apposito tipo wordpress.conf.

Le differenze tra le due architetture server sono comunque, come è facile intuire, piuttosto tecniche, ed è bene non basarsi troppo sulla propria esperienza (se limitata soprattutto) e, come se non bastase, diffidare dalle guide che tendono a presentare questi due mondi come contrapposti o, peggio, nei quali uno è migliore dell’altro a prescindere.


Ti piace questo articolo?

0 voti

Su Trovalost.it puntiamo sulla qualità dei contenuti da quando siamo nati: la tua sincera valutazione può aiutarci a migliorare ogni giorno.

Ti potrebbero interessare (Visti e provati):

Cerca altro nel sito

Clicca sul box, e scegli la sezione per vederne i contenuti.