GNU/Linux >> Linux Esercitazione >  >> Linux

NGINX vs Apache:la scelta del miglior server Web nel 2022

Un server web è un software per computer che serve contenuti web. Crea anche una connessione tra un server di elaborazione e il browser Web di un utente, distribuendo file avanti e indietro tra di loro.

La scelta del server Web corretto è fondamentale quando si configura un sito Web o si avvia un progetto VPS poiché può influire in modo significativo sulle prestazioni e sulla sicurezza di un sito.

Se non sei sicuro di quale server web utilizzare, considera Apache e NGINX – entrambi sono i server Web più popolari e sono responsabili di servire oltre la metà del traffico su Internet.

Per aiutare a decidere con quale iniziare, esamineremo un confronto dettagliato tra NGINX e Apache.

NGINX vs Apache – Panoramica generale

Prima di iniziare a confrontare Apache e NGINX, esploriamo le differenze tra i server Web e le loro caratteristiche generali.

Apache

Il Server HTTP Apache – comunemente indicato come Apache o Apache HTTPD – è un software per server web gratuito e open source. Elabora le richieste dei client e fornisce contenuti Web tramite Hypertext Transfer Protocol (HTTP).

Il server Web Apache è stato rilasciato nel 1995 e da allora è stato mantenuto dallaApache Software Foundation . Era anche il server web dominante nel primo world wide web.

Apache HTTP Server attualmente alimenta circa il 33,9% dei siti Web in tutto il mondo e detiene la posizione numero uno nella quota di mercato come uno dei server Web più vecchi.

Il server Web Apache supporta molti sistemi operativi (OS) come Microsoft Windows, OpenVMS e qualsiasi sistema operativo simile a Unix come Linux e macOS.

Inoltre, il server web Apache fa anche parte dello stack LAMP, uno dei primi stack software open source per lo sviluppo web. Di conseguenza, il server web funziona bene anche con molti sistemi di gestione dei contenuti (CMS), linguaggi di programmazione e framework web.

Apache è particolarmente popolare per la potenza e la flessibilità che derivano dal suo sistema di moduli . Con i moduli di Apache, gli utenti possono facilmente aggiungere o rimuovere funzioni, modificando il proprio server in base alle proprie esigenze.

NGINX

NGINX – pronunciato come “Motore X ” – è uno dei server più affidabili per scalabilità e velocità. È anche uno dei server Web in più rapida crescita del settore, avendo raggiunto la seconda posizione nella quota di mercato.

Proprio come Apache, NGINX è open source e gratuito.

Igor Sysoev, il creatore di NGINX, ha iniziato a sviluppare questo software nel 2002 per rispondere al problema C10K. All'epoca, molti server Web non erano in grado di gestire più di 10.000 connessioni contemporaneamente.

Il server web NGINX è stato rilasciato con un'architettura asincrona e basata sugli eventi, consentendo l'elaborazione simultanea di molte richieste.

NGINX è particolarmente popolare grazie alla sua capacità di far crescere e aumentare il traffico ed essere facile da scalare su hardware minimo. Inoltre, è eccellente per servire file statici velocemente.

Oltre ad essere utilizzato come server Web, NGINX può essere utilizzato anche come bilanciatore del carico per migliorare l'efficienza e la disponibilità delle risorse di un server. Inoltre, può funzionare come proxy inverso, garantendo un flusso di traffico regolare tra server e client.

NGINX supporta quasi tutti i sistemi operativi simili a Unix. Tuttavia, l'installazione di NGINX su Windows potrebbe comportare alcune limitazioni delle prestazioni, come la mancanza di scalabilità e problemi di autenticazione UDP.

Ora che abbiamo esaminato le basi di Apache e NGINX, è il momento di confrontarle utilizzando diversi aspetti critici importanti per i server web.

Architettura di base – Gestione delle connessioni

L'architettura del server Web è il layout logico o il meccanismo che determina il modo in cui un server Web gestisce le richieste, le connessioni e il traffico Web. È uno dei criteri essenziali da considerare quando si sceglie un server web.

Confrontiamo NGINX e Apache in termini di architettura di base e come entrambi i software gestiscono le connessioni.

Apache

Apache segue un'architettura basata sui processi per impostazione predefinita, il che significa che crea un singolo thread per gestire ogni richiesta di connessione.

Lo svantaggio dell'architettura basata sui processi è che Apache deve creare molti processi quando gestisce molte richieste. Può portare a un forte consumo di risorse , causando problemi al server come caricamento lento delle pagine web e interruzioni del sito.

Fortunatamente, Apache fornisce vari moduli di elaborazione multipla (MPM) che determinano come questo server Web open source accetta e gestisce le richieste HTTP e gli utenti sono liberi di scegliere quale MPM si adatta meglio alle loro esigenze.

Esistono tre MPM principali:

  • mpm_prefork – l'MPM prefork non è in thread, il che significa che ogni processo figlio può gestire solo una richiesta alla volta. Tuttavia, le sue prestazioni peggiorano immediatamente dopo che le richieste superano il numero di processi, rendendo difficile la scalabilità efficace di questo MPM.
  • mpm_worker – ogni processo dell'MPM di lavoro può creare più thread e ogni thread può anche gestire una connessione. Ciò consente al sistema di soddisfare più richieste contemporaneamente. Inoltre, poiché i thread richiedono meno risorse dei processi, questo MPM può scalare meglio e consumare meno risorse rispetto all'MPM prefork.
  • mpm_event – l'evento MPM è simile al worker MPM, ma è anche ottimizzato per gestire le connessioni keep-alive. Funziona mettendo da parte thread dedicati per la gestione delle connessioni keep-alive e allocando le richieste attive ad altri thread. Questo processo evita che l'evento MPM venga rallentato da tutte le richieste keep-alive. Di conseguenza, il server Web Apache ha i requisiti di risorse più bassi se utilizzato con questo MPM.

Tieni presente che puoi caricare solo un MPM nel tuo server in qualsiasi momento. Se il tuo progetto richiede stabilità e compatibilità, usa il prefork MPM. Per i siti Web che necessitano di maggiore scalabilità e diversità, tuttavia, prendi in considerazione l'utilizzo di MPM di lavoro o di evento.

NGINX

Sebbene molti server Web utilizzino un'architettura semplice basata su thread o basata su processi, NGINX adotta un approccio diverso utilizzando un'architettura basata su eventi asincrona e non bloccante . Ciò consente al server Web di gestire più connessioni all'interno di un unico processo.

NGINX ha un processo principale che esegue operazioni privilegiate come l'associazione alle porte, la lettura e la valutazione dei file di configurazione e la creazione di diversi processi figlio.

Ecco tre tipi di processi figlio NGINX :

  • Processo del caricatore della cache – può caricare la cache basata su disco nella zona di memoria. Questo processo richiede poche risorse poiché viene eseguito solo una volta, subito dopo l'avvio di NGINX.
  • Processo di gestione della cache – mira a mantenere la quantità di dati memorizzati nella cache entro le dimensioni configurate controllando periodicamente la cache e rimuovendo i dati a cui si accede meno di recente.
  • Processo di lavoro – può gestire centinaia di migliaia di connessioni HTTP contemporaneamente, il che significa che non è necessario creare nuovi processi o thread per ogni connessione. Invece, ogni processo di lavoro viene eseguito in modo indipendente e contiene unità più piccole chiamate connessioni di lavoro e ogni unità è responsabile della gestione dei thread delle richieste. I processi di lavoro possono anche comunicare con i server upstream, nonché leggere e scrivere contenuti su disco.

L'architettura basata sugli eventi di NGINX può distribuire efficacemente le richieste dei client tra i processi di lavoro, rendendo questo server Web più performante di Apache in termini di scalabilità.

Poiché NGINX può elaborare migliaia di richieste senza difficoltà, anche su sistemi a bassa potenza, questo server Web è adatto a siti Web con livelli di traffico elevati, come motori di ricerca, siti di eCommerce e servizi di cloud storage. Inoltre, molte reti di distribuzione di contenuti (CDN) popolari come MaxCDN e Cloudflare utilizzano anche NGINX per la distribuzione di contenuti.

Confronto delle prestazioni:contenuto statico e contenuto dinamico

Le prestazioni di un server web sono solitamente determinate dalla sua capacità di gestire contenuti statici e dinamici.

Contenuto statico è qualsiasi file Web che rimane lo stesso ogni volta che viene consegnato a un utente finale e di solito viene archiviato in un server CDN. Pertanto, cambia raramente e non dipende dal comportamento dell'utente, rendendolo uno dei tipi di contenuto più semplici da trasmettere su Internet. Alcuni esempi di file statici includono una libreria JavaScript, file HTML e CSS e immagini.

Contenuti dinamici , tuttavia, è una pagina web o un file che cambia in base agli interessi, alle caratteristiche e alle preferenze dell'utente. Questo tipo di contenuto non sarà uguale per tutti poiché viene generato quando un utente richiede una pagina. Alcuni esempi di siti con questo tipo di contenuto sono negozi online e piattaforme di social media.

Poiché NGINX e Apache hanno modi diversi di gestire le richieste di contenuto statico e dinamico, vediamo quale server Web funziona meglio in questo confronto tra Apache e NGINX.

Apache

Apache fornisce contenuto statico utilizzando il suo approccio tradizionale basato su file:le prestazioni di questa operazione dipendono principalmente dagli MPM menzionati in precedenza.

Apache può anche eseguire contenuto dinamico all'interno del server web stesso senza dover fare affidamento su componenti esterni. Invece, elabora il contenuto dinamico integrando un processore di linguaggi adatti in ciascuna delle sue istanze di lavoro e gli utenti possono attivare questo processore tramite i moduli caricabili dinamicamente di Apache.

NGINX

Quando si tratta di servire contenuti statici, NGINX è più veloce di Apache poiché memorizza nella cache i file statici per renderli disponibili ogni volta che vengono richiesti.

Tuttavia, NGINX non è integrato con la capacità di elaborare contenuti dinamici. NGINX deve passare le richieste a un processore esterno come FastCGI Process Manager (PHP-FPM) per l'esecuzione per gestire ed elaborare il contenuto dinamico. Una volta che questo server web riceve il contenuto, trasferirà i risultati al client.

Configurazione a livello di directory per NGINX e Apache

Se desideri concedere a un altro utente il controllo su alcuni componenti del tuo sito Web, è essenziale scegliere un server Web che consenta la configurazione a livello di directory all'interno delle sue directory di contenuti.

In questo confronto tra NGINX e Apache, vedremo quale server Web consente la configurazione a livello di directory.

Apache

Apache supporta una configurazione aggiuntiva per directory tramite file .htaccess.

Il .htaccess i file consentono agli utenti non privilegiati di controllare aspetti specifici del tuo sito Web senza consentire loro di modificare il file di configurazione principale.

Ecco perché molti provider di hosting condiviso utilizzano Apache per consentire ai propri clienti l'accesso a directory specifiche, pur mantenendo il controllo del file di configurazione principale.

Apache interpreta anche .htaccess file ogni volta che vengono trovati lungo un percorso di richiesta, il che significa che possono essere implementati immediatamente senza ricaricare il server web.

Tuttavia, ci sono alcuni aspetti negativi nell'usare .htaccess File. Uno di questi è che può influire sulle prestazioni del tuo sito poiché Apache carica ogni .htaccess file per ogni richiesta di documento. Questo può essere un killer di risorse, soprattutto per i siti Web con molto traffico.

Un'altra cosa da considerare prima di usare .htaccess file è che consentire ad altri utenti di modificare la configurazione del server potrebbe causare errori di sicurezza.

Pertanto, se non hai bisogno di consentire ad altre parti di accedere alla configurazione del tuo server, assicurati di disabilitare .htaccess file.

NGINX

A differenza di Apache, NGINX non supporta la configurazione a livello di directory. Anche se questo può sembrare un aspetto negativo, funziona a favore dei suoi utenti poiché aiuta ad aumentare le prestazioni del sito.

Poiché NGINX è progettato per essere efficiente, non è necessario cercare .htaccess file e interpretarli, rendendolo in grado di soddisfare una richiesta più velocemente di Apache.

NGINX protegge il tuo server non consentendo configurazioni aggiuntive poiché solo qualcuno con autorizzazione di root può modificare le impostazioni del tuo server e del tuo sito.

Moduli in Apache vs Moduli in NGINX

La maggior parte dei server Web viene fornita con un file di configurazione standard pronto all'uso. A volte, tuttavia, gli sviluppatori Web potrebbero voler includere moduli per rendere la programmazione più conveniente o estendere la funzionalità del server Web.

Sebbene NGINX e Apache siano entrambi estensibili attraverso un sistema di moduli, il modo in cui funzionano è notevolmente diverso.

Apache

Apache è un server web personalizzabile che offre più di 50 moduli ufficiali caricabili dinamicamente , che può essere utilizzato ogni volta che gli utenti ne hanno bisogno. Inoltre, è facile trovare altri moduli di terze parti su Internet.

Sebbene le funzionalità principali del server Apache siano sempre disponibili, i moduli possono essere caricati e scaricati per modificare alcune delle funzioni principali di questo server web.

I moduli dinamici di Apache possono svolgere varie attività, come l'elaborazione di contenuti dinamici, l'impostazione di variabili di ambiente e la riscrittura di URL.

Ecco alcuni dei moduli più comunemente usati da Apache:

  • mod_headers – ti consente di controllare e personalizzare le intestazioni di richieste e risposte HTTP in Apache.
  • mod_expires – consente agli utenti di definire intervalli di scadenza per diversi tipi di contenuti sui siti web.
  • mod_authz_host – abilita il controllo dell'accesso e l'autorizzazione in base al nome host, all'indirizzo IP o alle caratteristiche della richiesta.
  • mod_mime – aiuta ad assegnare meta-informazioni di contenuto con estensioni di file.
  • alias_mod – consente agli utenti di informare i clienti che l'URL richiesto non è corretto.

Tieni presente che Apache viene fornito con moduli precompilati e li carica nella memoria del server. Pertanto, assicurati di disabilitare le funzionalità che non ti servono per ridurre il consumo di risorse.

NGINX

NGINX offre più di 100 moduli di terze parti da integrare nel software di base. Gli utenti con una buona conoscenza del linguaggio C possono anche creare moduli NGINX adatti alle esigenze del loro progetto.

Tuttavia, i moduli NGINX sono non caricabili dinamicamente poiché devono essere compilati all'interno del software di base stesso. Per caricare i moduli in modo dinamico, gli utenti devono optare per NGINX Plus.

Ciò rende NGINX meno flessibile di Apache, si traduce in una migliore sicurezza poiché l'integrazione di molti moduli dinamici potrebbe comportare alcuni rischi per la sicurezza.

Sicurezza con Apache e NGINX

È fondamentale scegliere un server Web sicuro e affidabile in grado di mantenere i dati del tuo sito Web al sicuro e che sia regolarmente aggiornato con tutte le ultime patch.

Apache

Apache Software Foundation sta attivamente cercando di eliminare qualsiasi problema di sicurezza relativo al suo software per mantenere sicuro il server HTTP Apache. Gli utenti possono iscriversi alla mailing list degli annunci del server Apache per rimanere informati sugli ultimi aggiornamenti dal team di sviluppo software.

Apache include anche alcune impostazioni di configurazione che possono aiutare a gestire gli attacchi denial-of-service (DoS), come ad esempio:

  • Timeout – definisce il numero di secondi che Apache attenderà per eventi specifici prima di fallire una richiesta. I siti Web soggetti ad attacchi DoS dovrebbero impostare questo numero a un minimo di pochi secondi.
  • RichiediReadTimeout – interrompe le connessioni dai client che non inviano le loro richieste abbastanza rapidamente.
  • KeepAliveTimeout – decide per quanto tempo attenderà il server Apache e manterrà la connessione aperta per una nuova richiesta.

Tieni presente che sebbene Apache sia progettato per essere sicuro e stabile, la sicurezza del tuo server dipende anche da come configuri questo server. Pertanto, prendi in considerazione l'adozione di alcune misure di sicurezza aggiuntive, come l'installazione di un WAF (Web Application Firewall).

NGINX

NGINX offre anche diversi controlli di sicurezza pronti all'uso. Uno di questi è la limitazione della velocità, che riduce la frequenza delle richieste in entrata a un valore tipico per i client reali e aiuta a proteggere il server dagli attacchi DDoS.

La limitazione della velocità NGINX viene utilizzata anche per proteggere i server delle applicazioni a monte da troppe richieste degli utenti contemporaneamente.

Oltre a ciò, gli utenti NGINX possono prevenire attacchi DDoS consentendo o negando l'accesso in base agli indirizzi IP dei client. Questo accesso può anche essere limitato da password, risultato di sottorichiesta o larghezza di banda.

Inoltre, NGINX supporta la versione più recente di Transport Layer Security (TLS), che offre una crittografia affidabile per i dati inviati su Internet.

Per ottenere più funzionalità di sicurezza, considera l'utilizzo di NGINX Plus. Con questa versione premium, avrai accesso alla funzione Single Sign-On (SSO), che ti consente di autenticarti in modo sicuro con più siti Web e applicazioni utilizzando un set di credenziali.

Oltre a ciò, gli utenti di NGINX possono visitare il sito Web di questo server open source per trovare ulteriori avvisi sulla sicurezza e notizie sugli ultimi aggiornamenti.

Supporto della piattaforma

Chi è nuovo nel mondo dello sviluppo web dovrebbe assicurarsi che il server web scelto fornisca aiuto e supporto. Ciò consente assistenza quando si affronta un problema relativo al software.

Apache

Apache offre un'ampia documentazione che copre vari argomenti su questo software.

Offre anche il supporto della comunità via e-mail, consentendo agli utenti di ottenere aiuto da persone che hanno familiarità con Apache HTTPD.

Gli utenti possono anche porre domande rapide su Stack Overflow e #httpd canale sulla rete IRC Freenode.

NGINX

Per aiutare gli utenti a risolvere eventuali problemi di sviluppo, NGINX fornisce una mailing list gestita e moderata dalla comunità. Oltre a ciò, offre un forum di supporto pubblico per assistere i suoi utenti.

Grazie a molti utenti NGINX, è anche facile trovare altri forum della community in cui gli sviluppatori condividono come risolvere i problemi tecnici.

NGINX fornisce anche molte risorse di apprendimento per aiutare i principianti a saperne di più su questo software, come blog, glossari, documentazione, ebook, webinar e schede tecniche.

Oltre a ciò, gli utenti che utilizzano NGINX Plus possono anche ottenere supporto dedicato dal team, pronto ad assistere con l'installazione e la distribuzione.

Scelta di un server Web

Dopo aver esaminato i confronti tra NGINX e Apache, è chiaro che ogni software presenta vantaggi e svantaggi. Pertanto, è essenziale conoscere le proprie esigenze prima di decidere tra NGINX o Apache.

Apache è adatto per l'hosting condiviso ambienti. Offre l'accesso come root per modificare il file di configurazione principale, consentendo agli utenti non privilegiati di controllare diversi aspetti del server.

Lo svantaggio è che questo software può consumare molta memoria del server .

Per quanto riguarda NGINX, ha prestazioni migliori di Apache durante la gestione di richieste di contenuto statico. Può anche servire molti clienti contemporaneamente durante un carico elevato, rendendolo una scelta eccellente per un sito con un grande volume di traffico.

Inoltre, NGINX è multifunzionale – gli utenti possono usarlo come proxy inverso, bilanciamento del carico e soluzione di memorizzazione nella cache.

Tuttavia, questo software non può offrire contenuti dinamici per impostazione predefinita e deve inoltrare tutte le richieste di contenuto dinamico a un server delle applicazioni back-end.

Ricorda che ci sono molti altri server web popolari tra cui scegliere, che potrebbero avere più di quello che Apache e NGINX possono offrire specificamente per te. Alcuni di loro sono Tornado ,Node.js e Tomcat.

Apache e NGINX possono lavorare insieme?

È possibile eseguire NGINX e Apache insieme e sfruttare i punti di forza di ciascun server:NGINX per la sua elevata velocità di elaborazione e Apache per i suoi potenti moduli.

La pratica comune per l'utilizzo di entrambi i software è quella di posizionare NGINX come proxy inverso davanti ad Apache poiché può gestire centinaia di connessioni contemporaneamente.

Come proxy front-end per Apache, NGINX gestirà tutte le richieste dai client. Ad esempio, se riceve una richiesta di contenuto statico, NGINX servirà i file direttamente al client.

Come server proxy inverso per contenuto dinamico, NGINX inoltrerà la richiesta ad Apache, che la elaborerà e trasferirà il contenuto finale al client tramite NGINX.

L'uso di Apache e NGINX può ridurre alcuni blocchi che di solito si verificano quando un thread o un processo Apache è occupato, aiutando a aumentare le prestazioni del server .

Conclusione

Può essere difficile decidere tra Apache e NGINX poiché sono entrambi potenti a modo loro. Ad esempio, Apache fornisce un'ampia gamma di moduli, mentre NGINX offre scalabilità e velocità.

La principale differenza tra i server Web NGINX e Apache è che NGINX ha un'architettura basata sugli eventi che gestisce più richieste all'interno di un singolo thread, mentre Apache è guidato dal processo creando un thread per ogni richiesta. Pertanto, consentendo a NGINX di avere prestazioni generalmente migliori.

Ogni software ha i suoi pro e contro, quindi decidere se usare NGINX o Apache dipenderà interamente dalle preferenze dell'utente.

Ricapitoliamo ogni aspetto che abbiamo confrontato:

  • Architettura di base – Apache crea un singolo thread per gestire ogni richiesta di connessione, mentre un singolo processo NGINX può occuparsi contemporaneamente di più connessioni.
  • Prestazioni – NGINX è più veloce di Apache nel fornire contenuto statico, ma ha bisogno dell'aiuto di un altro software per elaborare le richieste di contenuto dinamico. D'altra parte, Apache può gestire internamente i contenuti dinamici.
  • Configurazione a livello di directory – Apache viene fornito con .htaccess file, consentendo agli utenti di apportare modifiche alla configurazione del proprio sito senza modificare le impostazioni del server principale. Nel frattempo, NGINX non supporta la configurazione a livello di directory.
  • Moduli – I moduli di Apache possono essere caricati dinamicamente, mentre i moduli NGINX devono essere compilati all'interno del software principale.
  • Sicurezza – Sia Apache che NGINX sono sicuri e affidabili. Hanno anche diversi strumenti di sicurezza per proteggere un sito dagli attacchi DDoS.
  • Supporto – Apache e NGINX offrono supporto e documentazione della community per aiutare i principianti con qualsiasi problema.

Invece di scegliere NGINX o Apache, può essere più efficiente utilizzare entrambi i software per migliorare le prestazioni del server:NGINX come server proxy inverso per la gestione delle richieste di contenuto statico e Apache come back-end per servire contenuto dinamico.

Ci auguriamo che questo articolo ti abbia aiutato a capire cosa sono NGINX e Apache, le differenze tra i due e quando dovresti considerare di usarli.

Se hai altre domande su NGINX e Apache, lasciaci un commento qui sotto.


Linux
  1. Come configurare un server web Apache

  2. cPanel è il migliore

  3. Ottimizzazione del server Web Apache Keep-alive

  4. Apache vs Nginx:quale server Web dovresti scegliere

  5. Come installare Nginx Web Server su Linux

Come ottenere le migliori prestazioni dal server Nginx

I migliori browser leggeri open source per Linux nel 2022

Le 10 migliori cache Web Linux per prestazioni migliori

Apache vs Nginx:quale server Web è il migliore per te?

Come aggiungere il supporto PHP-FPM su Apache e Nginx Web Server su Ubuntu 18.04

Le migliori distribuzioni Linux nel 2022