Ricerca nel sito web

Perché trovo Nginx praticamente migliore di Apache


Secondo l’ultimo sondaggio sui server web condotto da Netcraft verso la fine del 2017 (precisamente a novembre), Apache e Nginx sono i server web open source più utilizzati su Internet.

Apache è un server HTTP gratuito e open source per sistemi operativi simili a Unix e Windows. È stato progettato per essere un server sicuro, efficiente ed estensibile che fornisce servizi HTTP in sincronia con gli standard HTTP prevalenti.

Fin dal suo lancio, Apache è stato il server web più popolare su Internet dal 1996. È lo standard de facto per i server web nell'ecosistema Linux e open source. I nuovi utenti Linux normalmente lo trovano più semplice da configurare e utilizzare.

Nginx (pronunciato "Engine-x") è un server HTTP gratuito, open source e ad alte prestazioni, un proxy inverso e un server proxy IMAP/POP3. Proprio come Apache, funziona anche su sistemi operativi simili a Unix e Windows.

Ben noto per le sue elevate prestazioni, stabilità, configurazione semplice e basso consumo di risorse, nel corso degli anni è diventato così popolare e il suo utilizzo su Internet sta raggiungendo livelli sempre più alti. Ora è il server web preferito dagli amministratori di sistema esperti o dai web master dei siti più importanti.

Alcuni dei siti più frequentati forniti da:

  • Apache sono: PayPal, BBC.com, BBC.co.uk, SSLLABS.com, Apple.com e molti altri.
  • Nginx sono: Netflix, Udemy.com, Hulu, Pinterest, CloudFlare, WordPress.com, GitHub, SoundCloud e molti altri.

Esistono numerose risorse già pubblicate sul web riguardanti il confronto tra Apache e Nginx (intendo proprio articoli 'Apache Vs Nginx'), molti di cui spiegano chiaramente in dettaglio, le loro caratteristiche principali e le operazioni in vari scenari, comprese le misure delle prestazioni nei benchmark di laboratorio. Pertanto non se ne parlerà in questa sede.

Condividerò semplicemente la mia esperienza e i miei pensieri sull'intero dibattito, avendo provato Apache e Nginx, entrambi in ambienti di produzione basati sui requisiti per ospitare moderne applicazioni web, nel prossimo sezione.

Ragioni per cui trovo Nginx praticamente migliore di Apache

Di seguito sono riportati i motivi per cui preferisco il server Web Nginx rispetto ad Apache per la distribuzione moderna dei contenuti Web:

1. Nginx è leggero

Nginx è uno dei server web leggeri in circolazione. Ha un ingombro ridotto su un sistema rispetto ad Apache che implementa una vasta gamma di funzionalità necessarie per eseguire un'applicazione.

Poiché Nginx mette insieme una manciata di funzionalità principali, si affida a server web upstream dedicati di terze parti come un backend Apache, FastCGI, Memcached, SCGI e server uWSGI o server applicativi, ovvero server specifici della lingua come Node.js, Tomcat , eccetera.

Pertanto il suo utilizzo della memoria è molto più adatto per distribuzioni di risorse limitate rispetto ad Apache.

2. Nginx è progettato per un'elevata concorrenza

A differenza dell’architettura threaded o orientata ai processi di Apache (modello processo per connessione o thread per connessione), Nginx utilizza un’architettura scalabile, guidata dagli eventi (asincrona). Impiega un modello di processo responsabile adattato alle risorse hardware disponibili.

Ha un processo master (che esegue le operazioni privilegiate come la lettura della configurazione e l'associazione alle porte) e che crea diversi processi di lavoro e di supporto.

Ciascuno dei processi di lavoro può gestire migliaia di connessioni HTTP contemporaneamente, leggere e scrivere contenuto su disco e comunicare con i server upstream. I processi di supporto (gestore della cache e caricatore della cache) possono gestire le operazioni di memorizzazione nella cache del contenuto su disco.

Ciò rende le sue operazioni scalabili e si traduce in prestazioni elevate. Questo approccio progettuale lo rende ulteriormente veloce e favorevole per le applicazioni moderne. Inoltre, è possibile utilizzare moduli di terze parti per estendere le funzionalità native di Nginx.

3. Nginx è facile da configurare

Nginx ha una struttura di file di configurazione semplice, che lo rende estremamente facile da configurare. È costituito da moduli controllati da direttive specificate nel file di configurazione. Inoltre, le direttive si dividono in direttive a blocchi e direttive semplici.

Una direttiva di blocco è definita da parentesi graffe ({ e }). Se una direttiva di blocco può avere altre direttive tra parentesi graffe, viene chiamata contesto come eventi, http, server e posizione.

http {
	server {
		
	}
}

Una direttiva semplice è composta dal nome e dai parametri separati da spazi e termina con un punto e virgola (;).

http {
	server {
		location / {
				
				## this is simple directive called root
			   	root  /var/www/hmtl/example.com/;

		}
		
	}
}

Puoi includere file di configurazione personalizzati utilizzando, ad esempio, la direttiva include.

http {
	server {

	}
	## examples of including additional config files
	include  /path/to/config/file/*.conf;
	include  /path/to/config/file/ssl.conf;
}

Un esempio pratico per me è stato come sono riuscito a configurare facilmente Nginx per eseguire più siti Web con diverse versioni PHP, il che è stato un po' una sfida con Apache.

4. Nginx è un eccellente proxy frontend

Uno degli usi comuni di Nginx è configurarlo come server proxy, in questo caso riceve richieste HTTP dai client e le passa ai server proxy o upstream menzionati sopra, su diversi protocolli. È inoltre possibile modificare le intestazioni delle richieste client inviate al server proxy e configurare il buffering delle risposte provenienti dai server proxy.

Quindi riceve le risposte dai server proxy e le trasmette ai client. È molto più semplice configurarlo come server proxy rispetto ad Apache poiché i moduli richiesti sono nella maggior parte dei casi abilitati per impostazione predefinita.

5. Nginx è eccezionale per la fornitura di contenuti statici

I contenuti o i file statici sono in genere file archiviati sul disco del computer server, ad esempio file CSS, file JavaScript o immagini. Consideriamo uno scenario in cui utilizzi Nginx come frontend per Nodejs (il server delle applicazioni).

Sebbene il server Nodejs (in particolare i framework Node) disponga di funzionalità integrate per la gestione dei file statici, non è necessario eseguire un'elaborazione intensiva per fornire contenuto non dinamico, pertanto è praticamente vantaggioso configurare il server Web per fornire contenuto statico direttamente a clienti.

Nginx può svolgere un lavoro molto migliore nella gestione dei file statici da una directory specifica e può impedire che le richieste di risorse statiche blocchino i processi del server upstream. Ciò migliora significativamente le prestazioni generali dei server backend.

6. Nginx è un efficiente bilanciatore del carico

Per ottenere prestazioni e tempi di attività elevati per le applicazioni Web moderne, è necessario eseguire più istanze dell'applicazione su un server HTTP singolo o distribuito. Ciò potrebbe a sua volta richiedere la configurazione del bilanciamento del carico per distribuire il carico tra i server HTTP.

Oggi, il bilanciamento del carico è diventato un approccio ampiamente utilizzato per ottimizzare l’utilizzo delle risorse del sistema operativo, massimizzare la flessibilità, ridurre la latenza, aumentare il throughput, ottenere ridondanza e stabilire configurazioni con tolleranza agli errori – su più istanze dell’applicazione.

Nginx utilizza i seguenti metodi di bilanciamento del carico:

  • round-robin (metodo predefinito): le richieste ai server upstream vengono distribuite in modalità round-robin (in ordine di elenco dei server nel pool upstream).
  • meno connesso : qui la richiesta successiva viene inoltrata al server con il minor numero di connessioni attive.
  • ip-hash - qui viene utilizzata una funzione hash per determinare quale server deve essere selezionato per la richiesta successiva (in base all'indirizzo IP del client).
  • Hash generico – con questo metodo, l'amministratore di sistema specifica un hash (o chiave) con il testo specificato, le variabili della richiesta o del runtime o la loro combinazione. Ad esempio, la chiave potrebbe essere un IP e una porta di origine o un URI. Nginx distribuisce quindi il carico tra i server upstream generando un hash per la richiesta corrente e posizionandolo sui server upstream.
  • Tempo minimo (Nginx Plus) – assegna la richiesta successiva al server upstream con il minor numero di connessioni correnti ma privilegia i server con i tempi di risposta medi più bassi.

7. Nginx è altamente scalabile

Inoltre, Nginx è altamente scalabile e le applicazioni web moderne, in particolare le applicazioni aziendali, richiedono una tecnologia che offra prestazioni elevate e scalabilità.

Una società che beneficia delle straordinarie funzionalità di scalabilità di Nginx è CloudFlare, che è riuscita a scalare le sue applicazioni web per gestire più di 15 miliardi di visualizzazioni di pagine mensili con un'infrastruttura relativamente modesta, secondo Matthew Prince, co-fondatore e CEO di CloudFare.

Per una spiegazione più completa, consulta questo articolo sul blog Nginx: NGINX vs. Apache: Our View of a Decade-Old Question.

Conclusione

Sia Apache che Nginx non possono essere sostituiti l'uno dall'altro, hanno i loro punti di forza e di debolezza. Tuttavia, Nginx offre una tecnologia potente, flessibile, scalabile e sicura per alimentare siti Web e applicazioni web moderni in modo affidabile ed efficiente. Qual è la tua opinione? Fatecelo sapere tramite il modulo di feedback qui sotto.