Apache e Nginx sono i due server open source più utilizzati al mondo ed In totale rappresentano più del 70% dei server utilizzati su scala mondiale.
Apache e Nginx hanno molte funzionalità in comune, ma allo stesso tempo hanno molte differenze. In questo post andremo ad analizzare le differenze che sono presenti tra questi due server.
Differenze tra Apache e Nginx
Gestione delle connessioni
Probabilmente una delle differenze più grandi tra Apache ed Nginx è il modo in cui questi server reagiscono di fronte ad una nuova connessione de parte di un cliente.
I server Apache sono dotati di moduli chiamati MPM che sono responsabili per la gestione delle nuove connessioni con i clienti.
Questi moduli permettono al server di scegliere il corretto algoritmo in risposta alla connessione in modo flessibile, per questo motivo è possibile utilizzare un server Apache in molti tipi di situazioni. Questa flessibilità viene ad un prezzo però: Il server può richiedere molte risorse è può avere una performance più lenta rispetto ad altri server.
Nginx invece fa uso di un algoritmo asincrono per gestire le nuove connessioni. Questo vuol dire che il server è in grado di eseguire dei processi che possono gestire migliaia di connessioni contemporanee. Questo permette ad Nginx di crescere in dimensioni anche se si hanno delle risorse limitate (CPU e memoria).
Gestione dei contenuti statici e dinamici
Entrambi i server sono in grado di inviare e ricevere file statici, ma quando si parla di fare un render di un contenuto dinamico Apache ha decisamente la meglio. Infatti Apache è in grado di eseguire gli script di un’applicazione interinalmente, mentre Nginx deve assegnare il processo di rendering ad un processo esterno, per poi ricevere in risposta il contenuto pre-processato (per esempio uno script PHP che genera una pagina web)
Configurazione del server
Apache permette una configurazione estensiva del server basata su un file chiamato .htaccess Per esempio è possibile assegnare diversi privilegi a utenti di un sito per permettere a loro di modificare solamente alcuni aspetti del sito stesso.
Nginx invece non ha a disposizione di un meccanismo di configurazione a directory. Pur essendo un grande svantaggio in flessibilità, Nginx sfrutta questo svantaggio per rendere il suo tempo di risposta ancora più breve, evitando inutili ricerche e parsing di file di configurazione.
Interpretazione basata su file o URL
Apache può interpretare le richieste in due modi: Come una risorsa fisica sul File System, o come un indirizzo URL a cui deve essere inviata una risposta specifica (tipicamente una pagina HTML).
Nginx invece è stato creato lo scopo di operare sia come un normale server, sia come un server proxy. Questo vuol dire che Nginx può fare da tramite tra il cliente e la risorsa richiesta da lui. Per questo motivo Nginx funziona principalmente con richieste tramite URL
Moduli
Sia Apache che Nginx permettono l’utilizzo di moduli esterni per estendere le proprie funzionalità. La differenza sta nel metodo utilizzato per caricare questi moduli nel proprio sistema.
Mentre Apache permette un caricamento dinamico dei moduli (per esempio mentre il server è in esecuzione), In Nginx i moduli devono essere selezionati e caricati nel sistema prima dell’esecuzione. In parole povere Nginx non permette il caricamento dinamico dei moduli.
Conclusioni
Ora che abbiamo visto in generale le differenze presenti tra Apache e Nginx forse vi siete fatti già un’idea del server che fa al vostro caso.
Molti amministratori però sono favorevoli all’idea di sfruttare il meglio dei due mondi ed utilizzare Apache e Nginx insieme. Infatti il server Nginx può essere posizionato “di fronte” al server Apache come Proxy.
In questo modo possiamo sfruttare la velocità di Nginx per servire i file statici, e allo stesso tempo sfruttiamo la stabilità di Apache nel generare contenuto dinamico.
Bene, Ora che abbiamo visto le differenze che ci sono tra i server Apache e Nginx potete pensare per voi stessi e farvi la vostra opinione su quale server fa al vostro caso.
Commentate in basso se avete qualche suggerimento o considerazione sull’argomento e sarò lieto di leggere le vostre opinioni :)
Grazie per aver letto il post. Seguite la pagina Facebook e Twitter per rimanere aggiornati su news, tutorial e altro sullo sviluppo web in italiano :)