Indice dei contenuti dell'articolo:
Apache e NGINX sono i due più popolari server web open source oggi. Tuttavia, decidere il meglio tra migliori tra i migliori può essere un compito difficile. Quindi, per rendere le cose più facili per voi, metteremo a confronto Apache vs Nginx in dettaglio.
Speriamo che questo post su Apache vs Nginx vi aiuti a fare la scelta giusta per il vostro business online.
Ma prima di andare oltre, passiamo attraverso una breve introduzione di entrambi i server web.
Server HTTP Apache
Apache HTTP Server è un server web open source multipiattaforma che a volte viene anche chiamato “httpd” e Apache.
Qui ci sono alcuni punti importanti su Apache:
Dal 1999, la Apache Software Foundation gestisce il marchio e i suoi servizi.
Il server è sviluppato e mantenuto da una comunità aperta di sviluppatori sotto l’egida della fondazione.
Per lo più eseguito su Linux, Apache alimenta oltre la metà di tutti i siti web in tutto il mondo.
Di gran lunga, è uno dei server web più popolari oggi, che è il componente del popolare stack LAMP (Linux, Apache, MySQL, PHP).
Server Web NGINX
Che cos’è NGINX? Pronunciato come “Engine X” – è un server web che è stato rilasciato nel 2004 da Igor Sysoev. Oggi, è molto di più che un semplice server web!
Ecco cosa dovreste sapere sul server Nginx:
All’inizio, la gente usava principalmente Nginx come integratore di Apache.
Era usato principalmente per servire file statici, ma oggi si è evoluto come un server web completo che si occupa dell’intera gamma di compiti del server.
Oggi, Nginx è spesso usato come reverse proxy, load balancer, mail proxy e per la cache HTTP.
Sia Apache che Nginx sono i server web più comuni per Linux. Insieme, servono più del 50% del traffico sul web.
P.S. Mentre Apache e Nginx condividono molte caratteristiche, i punti di forza e qualità sono diverse in molte aree. Ognuno eccelle a modo suo e ha i propri usi e scenari.
Per conoscere le differenze e giungere ad una conclusione, esaminiamo il confronto dettagliato e completo che segue. Abbiamo anche menzionato il vincitore di ogni punto di confronto alla fine di ogni punto.
Apache vs NGINX – Lasciate che la battaglia abbia inizio!
Stiamo confrontando i due migliori web server sulla base di questi 9 criteri. Tutte le caratteristiche sono critiche, quindi fate molta attenzione.
- Architettura
- Prestazioni
- Supporto OS
- Configurazione
- Interpretazione
- Moduli
- Flessibilità
- La sicurezza
- Supporto e supporto
- Conclusione
1. Architettura di base
Quando si parla di Apache vs Nginx, la differenza fondamentale sta nella loro architettura di design. Significa che differiscono nel modo in cui gestiscono i collegamenti e il traffico e rispondono alle diverse condizioni del traffico.
Uno implica un approccio orientato ai processi e l’altro segue un’architettura orientata agli eventi.
Apache
- Approccio guidato dal processo
- Crea un nuovo thread per ogni richiesta.
Apache segue un approccio multi-threaded. Fornisce una varietà di moduli di elaborazione multipli. Questi pre-moduli sono fondamentalmente di tre tipi di algoritmo di gestione delle richieste. Ognuno di essi è pensato per esigenze di server differenti.
Gli MPM (Multi-Processing Modules) forniscono un’architettura flessibile per la scelta di diverse connessioni e diversi algoritmi di gestione.
Inoltre, diverse versioni di Apache 2 utilizzano diversi moduli di processione.
I tre MPM principali di Apache sono:
- Process (prefork) MPM
- Worker MPM
- Event MPM
La vecchia scuola Apache (2.2) usa mpm_worker, mpm_prefork e mod_php.
Mentre Apache 2.4 (nuovo apache) è configurato per usare mpm_event, php-fpm.
Per impostazione predefinita, Apache 2.2 è configurato in modalità Pre-fork (mpm_prefork). Risponde ad un certo numero di processi, ognuno dei quali può servire una singola richiesta alla volta.
In altre parole, Apache crea ogni volta un nuovo thread per gestire ogni richiesta di connessione.
Thread: Un thread è la più piccola sequenza di istruzioni programmate che può essere gestita autonomamente da uno scheduler. Nella maggior parte dei casi, un thread è un componente di un processo.
Tuttavia, l’architettura di base di Apache può portare a un forte consumo di risorse, quindi, può causare problemi con il server (bassa velocità).
NGINX
- Approccio orientato agli eventi
- Gestisce richieste multiple all’interno di un unico thread
Nginx utilizza un’architettura ad evento e gestisce le richieste in modo asincrono.
È stato progettato per utilizzare un algoritmo di gestione della connessione non bloccante da evento. Così, il suo processo può gestire migliaia di connessioni (richieste) all’interno di un unico thread di elaborazione. Tali moduli di processo di connessione permettono a Nginx di lavorare in modo molto veloce e ampio con risorse limitate.
Inoltre, è possibile utilizzare Nginx su sistemi a bassa potenza, e con i sistemi che operano sotto carichi pesanti.
Vincitore:
NGiNX – Ha una struttura leggera e un’architettura molto più veloce di quella di Apache.
2. Prestazioni
Prendendo Apache vs Nginx, entrambi i server web processano i contenuti statici e dinamici in modo diverso. Dicono che Nginx è meglio quando si tratta di elaborare contenuti statici, vediamo se è vero!
2.1 Contenuto statico
Apache
Serve contenuti statici utilizzando il metodo basato su file
Contenuto statico o file sono tipicamente file memorizzati su disco sul computer server, ad esempio, file CSS, file JavaScript o immagini. Apache gestisce il contenuto statico utilizzando il metodo convenzionale basato su file.
NGINX
Nel servire il contenuto statico, Nginx è il re!
Poiché l’architettura di design di Nginx è meglio attrezzata per gestire il carico, è molto più veloce quando si tratta di servire il contenuto statico.
Esegue 2,5 volte più velocemente di Apache secondo un test di benchmark che esegue fino a 1.000 connessioni simultanee.
Nginx serve le risorse statiche senza che PHP debba saperlo. D’altra parte, Apache gestisce tutte quelle richieste con quel costoso overhead. Questo rende Nginx più efficace e meno impegnativo per le risorse di sistema.
Questa piccola immagine mostra il numero di richieste di contenuto statico elaborate al secondo. Nginx chiaramente supera Apache qui!
2.2 Contenuto dinamico
Apache
- Elabora i contenuti dinamici all’interno del server
Apache è in grado di elaborare contenuti dinamici all’interno del server web stesso senza doversi affidare a componenti esterni.
Parlando di Apache vs Nginx Performance: Nginx, se non migliore, è quasi uguale quando si considera l’elaborazione dinamica dei contenuti.
Ecco il confronto dei numeri dinamici di richiesta di contenuti al secondo. Sembra che ci sia poca differenza.
NGINX
Non elabora contenuti dinamici
Parlando di contenuti dinamici, Nginx non può elaborarli all’interno del server web come fa Apache. Tutte le richieste con contenuto dinamico della pagina web vengono passate ad un processo esterno (eg- PHP-FPM) per l’esecuzione.
Nginx attende che il contenuto finale ritorni e lo restituisce al cliente. Fare riferimento a questa immagine per avere un’idea chiara:
NGINX può servire il contenuto dinamico se usato con i gestori SCGI e il modulo FastCGI.
P.S. Questo processo sembra un po’ complicato. Tuttavia, funziona in qualche modo a suo favore e rende Nginx più veloce.
Vincitore:
Statico: Per quanto riguarda il contenuto statico, Nginx supera Apache.
Dinamico: entrambi sono ottimi nell’elaborazione dei contenuti dinamici.
3. Supporto OS
Il supporto al sistema operativo può essere un punto importante da considerare, specialmente quando si confrontano Apache e Nginx. Ma, entrambi sono quasi simili qui.
Apache
- Supporta tutti i sistemi Unix-like, inclusi Linux e BSD.
- Supporta completamente MS Windows
Apache funziona su tutti i tipi di sistemi Unix-like (ad esempio, Linux o BSD) e ha il pieno supporto per Microsoft Windows.
NGINX
- Supporta quasi tutti i sistemi operativi Unix-like OS
- Supporta parzialmente Windows.
Funziona anche su diversi moderni sistemi Unix-like e ha un certo supporto per Windows, ma le sue prestazioni di Windows non sono così forti come quelle di altre piattaforme.
Vincitore:
Apache esce vincitore qui.
4. Configurazione distribuita / centralizzata
Apache vs Nginx è un argomento meritato. La loro configurazione li rende diversi l’uno dall’altro e li rende ugualmente interessanti. Vediamo chi ha una configurazione più facile e veloce.
Apache
- Consente una configurazione aggiuntiva per ogni directory tramite file .htaccess.
Questa architettura permette agli utenti non privilegiati di controllare alcuni aspetti del proprio sito web senza concedere loro il permesso di modificare la configurazione principale. E’ una cosa grossa!
NGINX
- Non consente configurazioni aggiuntive
Esso, d’altra parte, ha un lato negativo. Non fornisce una configurazione aggiuntiva. Tuttavia, funziona a tuo favore in quanto questo aumenta le prestazioni.
Non permettendo la configurazione delle cartelle, può servire le richieste più velocemente di Apache. Non ha bisogno di cercare i file .htaccess e di interpretare le richieste fatte dall’utente.
Vincitore:
Apache se si considera la configurazione; NGiNX se si considera la velocità.
5. Richiesta Interpretazione
Nel dibattito tra Apache e Nginx, il metodo di interpretazione delle richieste è un interessante argomento di confronto. Entrambi elaborano e interpretano le richieste in modo completamente diverso.
I loro diversi metodi li rendono unici e rendono l’uno un po’ meglio dell’altro. Esploriamo come!
Apache
- Passaggi Posizione del file system
Fornisce la capacità di interpretare le richieste. Come risorsa fisica sul percorso del file system che potrebbe richiedere una valutazione più astratta. Passa le richieste come posizioni del file system.
Naturalmente, Apache usa le posizioni URI, ma sono generalmente per risorse più astratte. E mentre si crea o si configura un host virtuale, Apache usa i blocchi di directory sotto la radice del documento.
Questa preferenza per le posizioni del file system può essere vista anche nell’uso di file .htaccess per sovrascrivere configurazioni di directory specifiche.
NGINX
- Passa URI per interpretare le richieste
Nginx è stato creato sia per essere un server web che un server reverse proxy. A causa della richiesta architettonica.
Non fornisce un meccanismo per specificare la configurazione. Per la directory del file system, invece passa il loro stesso URI. Passare le richieste come URI invece di posizioni del file system permette a Nginx di funzionare facilmente sia nel web che nel server proxy. Configura in modo semplice, definendo come rispondere ai diversi modelli di richiesta.
Non controlla il file system finché non è pronto a servire la richiesta e spiega perché non implementa alcuna forma di file .htaccess.
Questo stesso disegno di interpretare le richieste come posizioni URI permette a Nginx di funzionare facilmente non solo come server web ma anche come proxy server, load balancer e cache HTTP.
Inoltre, nela sfida Apache vs Nginx, NGINX vince ancora una volta quando si tratta della velocità di trasferimento (la velocità con cui i dati sono stati inviati dal server al client). E nella maggior parte dei casi, Nginx vince di un giusto importo per il 500/100.
Vincitore:
Sembra che Nginx abbia vinto grazie alla sua interpretazione e risposta più rapida.
6. Moduli funzionali
Entrambi sono estensibili attraverso sistemi modulari. Ma il modo in cui lavorano è diverso. Confrontiamo i moduli di funzionalità di entrambi i server web: Apache vs Nginx!
Apache
- 60 moduli ufficiali caricabili dinamicamente che possono essere acceso/spento
Il server Apache ha un ricco set di funzioni che possono essere attivate installando uno dei 60 moduli ufficiali. Ci sono anche molti altri moduli non ufficiali che si possono trovare facilmente su internet.
Il suo sistema di moduli permette di caricare o scaricare dinamicamente i moduli per soddisfare le vostre esigenze. I suoi moduli possono essere attivati o disattivati per aggiungere o rimuovere funzionalità e per collegarsi al server principale.
In breve, Apache ha diversi moduli funzionali per soddisfare le vostre esigenze, ma molti di essi non sono usati spesso.
NGINX
- Moduli centrali di terze parti (non caricabili dinamicamente)
Nginx, invece, viene selezionato e compilato nel corso dei plugin di terze parti. Non caricabile dinamicamente. I moduli sono utili, tuttavia, ti permettono di dettare ciò che vuoi dal tuo server includendo solo le funzionalità che intendi utilizzare.
È considerato molto più sicuro del server Apache in quanto componenti arbitrari possono essere agganciati al server.
Inoltre, NGINX fornisce tutte le caratteristiche principali di un server web, senza sacrificare le qualità leggere e ad alte prestazioni che lo hanno reso vincente.
Nota: Apache è come Microsoft Word e Nginx è come Notepad. Come? Apache ha un milione di opzioni, ma ne servono solo alcune. NGINX fa queste ‘poche’ cose e le fa 50 volte più velocemente di Apache.
Vincitore:
NGiNX – Le sue caratteristiche e moduli meno importanti lo rendono più leggero, più intelligente e migliore web server di Apache.
7. Flessibilità
La flessibilità è una delle preoccupazioni più importanti quando si tratta di un server web. La flessibilità tra Apache e Nginx ha alcune interessanti differenze.
Apache
- Supporta la personalizzazione del web server attraverso moduli dinamici.
Le personalizzazioni al server web possono essere fatte attraverso moduli di equitazione. Apache ha avuto il caricamento dinamico dei moduli da più tempo, quindi tutti i moduli Apache lo supportano.
NGINX
- Non abbastanza flessibile da supportare moduli dinamici e caricamento.
Questo, tuttavia, non è il caso di NGINX. All’inizio del 2016, NGINX ha ottenuto il supporto per il caricamento dinamico dei moduli; in precedenza, NGINX richiedeva all’amministratore di compilare i moduli nel binario di NGINX.
La maggior parte dei moduli non supportano ancora il caricamento dinamico, ma nel tempo probabilmente lo faranno.
Vincitore:
Apache – E’ chiaramente avanzato su questo punto.
8. La sicurezza
La sicurezza Apache vs Nginx è di nuovo un argomento dibattuto. Beh, entrambi questi server web offrono una grande sicurezza estesa per la sua base di codice basato su C.
Quindi, utenti, rilassatevi!
Apache
- Grande sicurezza.
Apache si assicura che tutto il sito web che gira sul suo server sia al sicuro da qualsiasi danno e hacker.
Offre suggerimenti di configurazione per la gestione degli attacchi DDoS e il modulo mod_evasive per rispondere agli attacchi HTTP DoS, DDoS o di forza bruta.
NGINX
- Migliore sicurezza con una base di codici più piccola.
La base di codici NGINX, tuttavia, è significativamente più piccola di diversi ordini di grandezza, e questo è sicuramente un grande vantaggio da una prospettiva di sicurezza lungimirante.
Vincitore:
Nginx – Viene considerato più sicuro, sebbene sia corretto e assolutamente pacifico che la sicurezza intrinseca di due webserver possono essere equiparabili.
9. Supporto
L’assistenza è qualcosa a cui ogni cliente è molto interessato. Può rendere o rompere la vostra esperienza utente. Mentre si confronta il supporto Apache vs Nginx, non sembra esserci una grande differenza.
Apache
- Il supporto comunitario viene fornito attraverso mailing list, IRC e Stack Overflow.
Il supporto commerciale di Apache è disponibile da un certo numero di aziende terze parti, come OpenLogic, ma nessuna lista ufficiale è mantenuta dalla Apache Foundation. Il server Apache ha lo scopo di offrire un grande supporto a tutti i suoi utenti.
NGINX
- Supporto comunitario attraverso mailing list, IRC, Stack Overflow e un forum.
L’azienda dietro NGINX offre un prodotto commerciale chiamato NGINX Plus, che supporta una serie di funzioni aggiuntive per quanto riguarda il bilanciamento del carico, lo streaming multimediale e il monitoraggio.
Vincitore:
Pari e patta! Il supporto è quasi lo stesso in entrambi.
Alcune doverose considerazioni
Sia Apache che Nginx non possono essere sostituiti l’uno dall’altro, hanno i loro punti di forza e di debolezza. E dopo aver superato i benefici, le limitazioni e le differenze, potreste già avere un’idea del miglior server web per voi.
Beh, nel nostro post su Apache vs Nginx, 5 punti su 9 sono stati vinti da NGINX, 2 punti vanno ad Apache, e 2 sono stati ‘pari’ tra Apache e Nginx. Quindi, possiamo vedere chiaramente che NGINX ha un vantaggio su Apache.
Ancora confuso su quale server è la soluzione migliore per voi? Scopriamo quando scegliere quale!
Quando scegliere Apache su NGINX?
i) Apache .htaccess
NGINX non supporta qualcosa come il file .htaccess di Apache. Tuttavia, con Apache, si ha il vantaggio di dare agli utenti non privilegiati il controllo su alcuni aspetti importanti del loro sito web.
Gli utenti, ovviamente, non sono autorizzati a modificare la configurazione principale.
Utilizzando i file .htaccess, è possibile sovrascrivere le impostazioni di sistema per ogni directory.
Per prestazioni ottimali, includere queste direttive .htaccess nei file di configurazione principale.
In un ambiente di hosting condiviso, Apache funziona meglio grazie alla sua configurazione .htaccess.
P.S. Per l’hosting dedicato o VPS Nginx rimane l’opzione migliore.
ii) In caso di limitazioni di funzionalità – utilizzare Apache
Nginx ha alcuni moduli di base che sono molto importanti. Comunque, ci sono alcune limitazioni di funzionalità con Nginx.
In caso di limitazioni o di necessità di utilizzare moduli extra che non sono supportati da Nginx, potresti voler scegliere Apache.
Quando si sceglie NGINX su Apache?
i) Elaborazione veloce e statica del contenuto
Nginx può eseguire un lavoro migliore nella gestione dei file statici da una specifica directory.
Inoltre, i processi dell’upstream server non vengono bloccati a causa delle pesanti e multiple richieste di contenuto statico, poiché Nginx può elaborarli contemporaneamente. Questo migliora significativamente le prestazioni complessive dei server di backend.
Nginx sta cercando incessantemente di servire ai suoi utenti un’esperienza migliore. Ha mostrato una crescita notevole nel 2018. Date un’occhiata ai principali introiti del 2018 sul blog di Nginx.
ii) Ottimo per i siti web ad alto traffico
Se parliamo della velocità e di quanti clienti possono essere serviti con un carico elevato, Nginx sarà sempre vincente su Apache.
Questo rende Nginx significativamente leggero e grande per le risorse del server. Questo è il motivo per cui la maggior parte degli sviluppatori web preferisce Nginx ad Apache.
In particolare, gli e-store oggi assumono uno sviluppatore Magento che sa come lavorare su un sito web ad alto traffico, e che è abile nel lavorare su Nginx.
In poche parole, quando si tratta di servire un sito web con un grande volume di traffico, non c’è niente di meglio di Nginx.
Oppure, utilizzare entrambi insieme!
Sì, anche Apache e Nginx possono essere amici!
E’ possibile utilizzare i punti di forza di ogni server utilizzandoli insieme.
È possibile utilizzare Nginx davanti ad Apache come server proxy (come mostrato nell’immagine sotto). Questo sfrutta la velocità di elaborazione veloce di Nginx e la capacità di stabilire un grande no, di connessione contemporaneamente.
Per le connessioni statiche, Nginx servirà rapidamente i file ai client. Per i contenuti dinamici, ad esempio, i file Php, il reverse proxy server di Nginx invierà la loro richiesta ad Apache che potrà quindi elaborare i loro risultati e restituire la pagina renderizzata.
Nginx può quindi passare il contenuto finale al client. Inoltre, permette di avere un server web molto funzionale per servire i vostri clienti (il grande volume di utenti) molto velocemente.
In conclusione:
Decidere quale server web utilizzare, Nginx o Apache, è un passo importante nella configurazione del tuo sito web.
Entrambe le soluzioni sono in grado di gestire diversi carichi di lavoro e di lavorare con altri software per fornire uno stack web completo.
Speriamo che questa guida di confronto end-to-end vi abbia aiutato a scegliere il miglior server web.
Vuoi avere qualche consiglio in più? Mettiti in contatto con noi!