Apache con nginx
Puoi migliorare il funzionamento del server web che ospita i siti web dei tuoi clienti (Apache), utilizzando nginx, un server web aggiuntivo ad elevate prestazioni, normalmente utilizzato come server proxy inverso. Questo server web è stato appositamente progettato per distribuire vaste quantità di contenuto statico (come immagini, video, css, xml eccetera). A differenza di Apache, nginx è molto più efficace quando si tratta di gestire un gran numero di connessioni simultanee. Un altro vantaggio di questo server web rispetto ad Apache è che nginx ha un’impronta di memoria significativamente inferiore per connessione client.
Per potenziare i vantaggi di nginx, Plesk lo configura come un server proxy inverso che agisce tra Internet e Apache (vedi grafico sotto). Questo significa che nginx diventa un server web front-end che elabora tutte le richieste in arrivo dai visitatori del sito. Le richieste sono inviate ad Apache, il quale distingue, in cambio, le richieste per il contenuto statico e quello dinamico. Se una richiesta è per un file statico (come jpg, css, html, ecc.), Apache passa la richiesta attraverso tutti i gestori registrati (applica la configurazione a livello della directory .htaccess
, riscrive un URL, ecc.) e restituisce a nginx una risposta che contiene soltanto la posizione del file richiesto sul file system. nginx, individua il file e lo invia al client. Se la richiesta è per un file dinamico (come ad esempio, uno script PHP), Apache esegue il file e invia la risposta a nginx, il quale lo consegna al client.
Questo tipo di combinazione tra nginx e Apache offre i seguenti vantaggi:
- Aumenta il numero massimo di connessioni simultanee per un sito web.
- Diminuisce l’utilizzo di CPU del server e risorse della memoria. Il massimo effetto sarà conseguito per i siti web con una vasta quantità di contenuto statico (come gallerie fotografiche, siti di streaming video eccetera).
- L’efficienza di offrire servizi ai visitatori con connessioni a bassa velocità (GPRS, EDGE, 3G eccetera) si vede ottimizzata. Per esempio, un client con una connessione di 10 KB/s richiede uno script PHP, che genera una risposta di 100 KB. Se nginx non c’è sul server, la risposta viene consegnata da Apache. Durante i 10 secondi necessari per consegnare la risposta, Apache e PHP continuano a utilizzare complete risorse del sistema per la connessione aperta. Quando nginx è installato, Apache inoltra la risposta a nginx (la connessione nginx-verso-Apache è molto veloce, poiché entrambi si trovano sullo stesso server) e rilascia le risorse del sistema. Siccome l’impronta di memoria di nginx è inferiore, il carico complessivo sul server diminuisce. Se hai un grande numero di connessioni lente di questo tipo, l’utilizzo di nginx migliorerà significativamente le prestazioni del sito web.
I dettagli tecnici su come elabora Plesk le richieste HTTP con l’aiuto di nginx sono forniti più avanti in questa sezione. Per maggiori informazioni su come attivare il supporto per nginx in Plesk, consultare la sezione Installazione di nginx. Se non desideri usare nginx, rendi Apache il tuo server web front-end seguendo le istruzioni nella sezione Disattivare nginx. Se desideri che nginx elabori tutte le richieste HTTP per il contenuto web, vedi Regolare le impostazioni del server web Apache.
Come elabora Plesk le richieste HTTP con nginx
Per integrare perfettamente nginx con Apache, Plesk usa due moduli Apache aggiuntivi:
-
mod_aclr2 Questo modulo configura un gestore che viene eseguito dopo i gestori di tutti gli altri moduli Apache (mod_rewrite,
.htaccess
i moduli correlati, mod_php, eccetera). Perciò, se la richiesta è per contenuto dinamico, mod_aclr2 non l’otterrà mai perché la richiesta sarà servita da gestori di livello superiore di certi moduli Apache (mod_php, mod_perl, mod_cgi eccetera). Le uniche eccezioni sono le richieste SSI: una volta che arrivano a mod_aclr2, quest’ultimo le reindirizza verso i gestori corretti. Se la richiesta è per un file statico, mod_aclr2 cerca il percorso del file esatto sul file system e invia il percorso a nginx. - mod_rpaf oppure mod_remoteip Dal punto di vista di Apache, tutti i suoi client hanno lo stesso indirizzo IP - l’indirizzo del server nginx (vedi diagramma sopra). Questo causa problemi per i siti web e le app web che usano indirizzi IP dei client per finalità di autenticazione, statistiche, ecc. mod_rpaf (in Apache 2.2) o mod_remoteip (in Apache 2.4) risolve il problema sostituendo l’indirizzo IP del server nginx in tutte le richieste con indirizzi IP client. Più dettagliatamente, il modulo usa l’intestazione speciale X-Forwarded-For in cui nginx posiziona l’indirizzo IP di un client.
Diamo uno sguardo più da vicino al modo in cui Plesk elabora le richieste per contenuti statici e dinamici con l’aiuto di questi moduli.
La sequenza di elaborazione di una richiesta HTTP per un file statico è la seguente (vedi diagramma):
- Un client invia una richiesta a un server web.
- nginx aggiunge le intestazioni X-Accel-Internal (usata da mod_aclr2) e X-Forwarded-Fo (che contiene l’indirizzo IP del client) per la richiesta e invia la richiesta ad Apache.
- Apache riceve la richiesta e inizia ad elaborarla dai gestori registrati (applica la configurazione
.htaccess
, riscrive l’URL eccetera). In questo passaggio, mod_rpaf sostituisce l’indirizzo IP del server nginx nella variabile Apache REMOTE_ADDR con l’indirizzo del client dall’intestazione X-Forwarded-For. - Dopo che la richiesta è stata elaborata da tutti i gestori registrati, raggiunge mod_aclr2. Il gestore verifica la presenza dell’intestazione X-Accel-Internal. Se l’intestazione è presente, il modulo invia a nginx una risposta con contenuto zero e l’intestazione X-Accel-Redirect. Questa intestazione contiene il percorso esatto del file come determinato da mod_aclr2.
- Una volta nginx riceve la risposta, trova il file e lo consegna al client.
Il diagramma seguente è un esempio di come gestisce Plesk una richiesta di un file GIF di 2 KB.
Nel caso di elaborare richieste per contenuto dinamico, i passaggi da 1 a 3 sono gli stessi. Quindi la richiesta passa al gestore del modulo Apache appropriato (mod_php, mod_perl, mod_cgi eccetera). La richiesta non arriva mai a mod_aclr2 (eccetto per le richieste SSI). Il gestore genera una risposta e l’invia a nginx, il quale consegna in cambio la risposta al cliente. Il diagramma sottostante illustra il modo in cui Plesk elabora una richiesta per un file PHP.
Installazione di nginx
Se realizzi un’installazione da zero di Plesk, nginx sarà attivato in modo predefinito. Se aggiorni da versioni precedenti, puoi aggiungere il componente nginx in qualsiasi momento dopo l’aggiornamento in Strumenti e Impostazioni > Aggiornamenti > Aggiungi componenti. Una volta aggiunto il componente, è necessario eseguire il servizio Server proxy inverso (nginx) in Strumenti e impostazioni > Gestione servizi.
Puoi visualizzare la versione del server nginx installato in Strumenti e Impostazioni > Componenti del server.
Disattivare nginx
Per tornare alla configurazione con un singolo server web Apache, arresta il servizio Server proxy inverso (nginx) in Strumenti e Impostazioni > Gestione di servizi.
Per rendere nginx il server web front-end nuovamente, avvia il servizio Server proxy inverso (nginx).
Nota: Le operazioni di avvio e di arresto per il servizio Server proxy inverso (nginx) non solo iniziano e arrestano nginx, ma infatti attivano la configurazione del server web (combinazione di nginx e Apache o solo Apache come server web front-end). L’operazione di riavvio funziona nello stesso modo che per tutti gli altri servizi: Il servizio nginx viene riavviato.