Apache vs. Nginx: quale server Web è la scelta migliore?

0
120

Nginx e Apache insieme servono oltre il 50% del web. Ma Apache ha visto un calo negli ultimi anni, a favore di Nginx. Nginx è davvero migliore e ci sono dei vantaggi nell'usare Apache?

Nginx è più nuovo e più veloce

Nginx è molto più leggero di Apache. Questo è un problema radicato nella progettazione, sotto il cofano, Apache deve creare un nuovo thread di processo per ogni connessione. E sebbene possa elaborare 10 thread a una velocità paragonabile a Nginx, quando viene scalato fino a centinaia di connessioni simultanee, Nginx assume un ruolo decisivo.

Nginx funziona in modo diverso e può elaborare più connessioni all'interno di un singolo thread di processo. È progettato per funzionare anche come un semplice proxy inverso, quindi anziché portare il sovraccarico di un server Web completo è semplicemente progettato per spostare byte di dati da un luogo a un altro. Nginx può essere due volte più veloce di Apache quando serve contenuto statico e molto meno intensivo della CPU quando lo fa, il che lo rende eccellente per l'esecuzione su sistemi a bassa potenza.

Tuttavia, questa velocità conta davvero solo quando serve contenuto statico a molti utenti contemporaneamente. Quando inizi a servire contenuti dinamici, il collo di bottiglia si trova altrove, ad esempio nel tuo motore PHP, nella tua app Web o nel tuo database.

Poiché Nginx è anche un proxy inverso, puoi usarlo davanti a un altro server (anche Apache) specificamente per ospitare contenuto statico. Un esempio utile sono le applicazioni Node di rendering lato server, in cui le richieste HTTP alle pagine dinamiche devono essere inoltrate a un server che esegue Express, ma le risorse statiche (immagini, fogli di stile, ecc.) possono essere servite da Nginx. L'overhead durante questa operazione è minimo e può velocizzare notevolmente il contenuto statico.

Apache è più configurabile

Apache è più focalizzato sull'essere un server web e ha alcune funzioni utili come file di configurazione basati su directory e host virtuali. Ciò rende molto semplice l'esecuzione di più siti sullo stesso server. Ad esempio, puoi aggiungere un blocco VirtualHost come questo a /etc/httpd/conf/httpd.conf:

<VirtualHost 127.0.0.1:80> DocumentRoot /var/www/html ServerName www.firstsite.com </VirtualHost> Pubblicità

In questo modo Apache indirizzerà tutte le richieste a www.firstsite.com a una cartella specifica, che può avere le proprie impostazioni indipendenti da altri siti in esecuzione sul server. Questo può essere ulteriormente aumentato con i file .htaccess, che possono sovrascrivere la configurazione del server per una cartella specifica. Tuttavia, l'esecuzione di siti con file .htaccess è più lenta rispetto all'utilizzo della configurazione globale ed è consigliata solo nei casi in cui si desidera consentire ad altri utenti di modificare le impostazioni del server per una directory senza toccare la configurazione globale (l'hosting condiviso ne è l'esempio principale ).

Nginx può anche servire più domini da un singolo server e indirizzarli alle proprie cartelle, ma non è così configurabile, specialmente con una mancanza di funzionalità simili a .htaccess. Tuttavia, se hai davvero bisogno di quel tipo di funzionalità, puoi utilizzare Nginx come proxy inverso per accedere a contenuti pubblicati altrove, anche in esecuzione su un'altra istanza di Nginx o su più contenitori Docker.

Apache ha anche un supporto plugin molto migliore, sotto forma di moduli che possono essere caricati dinamicamente senza riavviare il server. Nginx supporta anche i moduli, ma il caricamento dei moduli è stato aggiunto solo di recente, quindi molti moduli richiedono ancora la patch del binario.

Quale server dovresti scegliere?

Nonostante le carenze, sono entrambi server web decenti. Sono entrambi gratuiti e open source, sebbene Nginx abbia una versione a pagamento chiamata Nginx Plus che aggiunge un software di bilanciamento del carico oltre a Nginx open source. Entrambi i server sono sicuri, hanno buone comunità di supporto e sono facili da configurare. Mentre Nginx vince in velocità, entrambi sono comparabili nel fornire contenuti dinamici.

Se non sei sicuro di quale utilizzare, scegli Nginx. In generale, se stai utilizzando un sistema Unix, Nginx è una buona scelta semplicemente per la sua velocità e facilità d'uso. Se hai bisogno di più configurazione, specialmente se stai eseguendo molti siti web sullo stesso server, Apache potrebbe funzionare meglio.

Pubblicità

Una cosa da notare è che se stai facendo uso di PHP, l'impostazione per Nginx è leggermente diversa. Apache esegue nativamente PHP nello stesso processo, comunicando direttamente con il motore PHP. Nginx lo esegue in un processo separato (PHP-FPM) e comunica con esso come un proxy inverso. Entrambi i metodi sono altrettanto veloci, ma la tua configurazione varierà.

Nginx e Apache supportano entrambi pienamente qualsiasi sistema Unix, incluso FreeBSD. Sebbene Nginx abbia tecnicamente una versione che funziona su Windows, non è la migliore. Apache è completamente supportato su Windows e come tale è il server web di riferimento su quella piattaforma.