Come è realizzata l'integrazione tra Apache & Nginx in Timeweb
Per molte aziende, Nginx + Apache + PHP è una combinazione molto standard e diffusa, e Timeweb non fa eccezione. Tuttavia, può essere interessante e utile capire come sia realizzata esattamente.

L'uso di questa combinazione è ovviamente dettato dalle esigenze dei nostri clienti. Sia Nginx che Apache svolgono ruoli importanti, ciascuno risolvendo specifiche esigenze.
Impostazioni principali Apache vengono eseguite nei file di configurazione di Apache stesso, mentre le impostazioni per i siti dei clienti avvengono tramite il file .htaccess.htaccess è un file di configurazione in cui il cliente può impostare autonomamente regole e comportamenti del server web. Queste impostazioni riguardano specificamente il proprio sito. Ad esempio, grazie alla funzionalità di Apache, gli utenti possono cambiare il modo di operare all'interno di una stessa versione di PHP da mod_php a mod_cgi; è possibile impostare reindirizzamenti, ottimizzazione per SEO, URL user-friendly, alcuni limiti per PHP.
Nginx viene utilizzato come server proxy per reindirizzare il traffico su Apache e come server web per servire contenuti statici. Inoltre, per Nginx abbiamo sviluppato moduli di sicurezza che consentono di proteggere i dati dei nostri utenti, ad esempio separando i diritti di accesso.
Immaginiamo che un certo utente acceda al sito del nostro cliente. Inizialmente, l'utente arriva su Nginx, che fornisce contenuti statici. Questo avviene istantaneamente. Poi, quando si tratta di caricare PHP, Nginx reindirizza la richiesta ad Apache. E Apache, insieme a PHP, genera contenuti dinamici.
Caratteristiche della combinazione Apache & Nginx in Timeweb
Nel nostro hosting virtuale sono implementati 2 schemi principali di funzionamento di Apache & Nginx: Condiviso e Dedicato.
Schema Condiviso
Questo schema è utilizzato dalla maggior parte degli utenti. Si distingue per la sua semplicità e il suo consumo di risorse: lo schema Condiviso utilizza meno risorse, quindi le sue tariffe sono più basse. Secondo questo schema, sul server è in esecuzione un solo Nginx, che consente di gestire tutte le richieste degli utenti, insieme a più istanze di Apache.
Lo schema Condiviso è stato perfezionato nel tempo: gradualmente abbiamo corretto i difetti. È comodo che possa essere realizzato senza la necessità di modificare il codice sorgente.

schema Condivisa
Schema Dedicato
Il Dedicated richiede più risorse, quindi la sua tariffa è più alta per i clienti. Nello schema Dedicated, per ogni cliente viene avviato un proprio Apache separato. Le risorse qui sono riservate per il cliente e vengono allocate in modo esclusivo. Come funziona: sul server ci sono diverse versioni di PHP. Sosteniamo le versioni 5.3, 5.4, 5.6, 7.1, 7.2, 7.3, 7.4. Quindi, per ogni versione di PHP viene avviato un proprio Apache.

schema Dedicated
Safe zone. Configurazione delle zone in Nginx
In precedenza, per Nginx utilizzavamo molte zone di memoria condivisa (zone) - un blocco server per ogni dominio. Questa configurazione richiede molte risorse, poiché per ogni sito viene creata una zona separata. Tuttavia, nelle impostazioni di Nginx, la maggior parte dei siti è simile, quindi riescono a essere collocati in un'unica zona grazie all'uso delle direttive map nel modulo ngx_http_map_module, che consentono di impostare corrispondenze. Ad esempio, abbiamo un modello di zona a cui dobbiamo fornire variabili: percorso del sito, versione PHP, utente. In questo modo, è accelerata la lettura della configurazione di Nginx, cioè il reload.
Questa configurazione ha notevolmente risparmiato risorse di memoria e ha accelerato il funzionamento di Nginx.
Il reload non avrà luogo!
Nello schema Shared ci siamo liberati dalla necessità di riavviare (reload) Apache quando si apportano modifiche alle impostazioni dei siti. In precedenza, quando un cliente voleva aggiungere un dominio o cambiare versione PHP, era richiesta un'operazione di reload di Apache, il che portava a ritardi nelle risposte e influiva negativamente sulle prestazioni dei siti.
Abbiamo eliminato i reload creando configurazioni dinamiche. Grazie a (modulo Apache), ogni processo viene eseguito da un utente separato, aumentando così il livello di sicurezza. Questo metodo consente di trasferire da Nginx ad Apache2 i dati dell'utente e il suo document_root. Pertanto, Apache non contiene la configurazione dei siti, la riceve in modo dinamico e non sono più necessari i reload.

Configurazione dello schema Shared
E per quanto riguarda Docker?
Molte aziende sono passate a sistemi basati su container. Timeweb sta attualmente valutando la possibilità di questa transizione. Sicuramente, in ogni soluzione si possono trovare vantaggi e svantaggi.
Oltre ai vantaggi indiscutibili, il sistema in contenitore offre meno risorse all'utente. In Timeweb, grazie allo schema di funzionamento descritto dell'hosting, l'utente non ha limiti nella memoria RAM. Riceve più risorse rispetto al contenitore. Inoltre, l'utente può caricare più moduli di Apache.
Timeweb gestisce circa 500.000 siti. Ci prendiamo una grande responsabilità e non apportiamo cambiamenti immediati e ingiustificati a un'architettura complessa. La combinazione di Apache & Nginx è affidabile e collaudata nel tempo. Da parte nostra, ci sforziamo di raggiungere le massime prestazioni grazie a configurazioni uniche.
Per garantire un funzionamento di qualità e rapido di un grande numero di siti è necessario utilizzare una configurazione templata e dinamica di Apache e Nginx. Essa consente di amministrare in modo semplice e veloce un elevato numero di server simili.
Fonte: habr.com
