Nginx dovrebbe essere nella parte anteriore di HAProxy o opposto?


11

Ho poca esperienza nella progettazione di architetture infrastrutturali di siti web. So che potrebbe essere specifico della situazione. Il sito web dovrebbe:

1) È necessario il supporto HTTPS per alcune pagine (ad es. Pagina di accesso) mentre altre sono solo pagine HTTP.

2) Sono necessari più server Web in modo da richiedere un certo bilanciamento del carico.

3) Hai bisogno di memorizzazione nella cache HTTP e compressione per migliorare le prestazioni.

4) Alcune richieste (ad es. Caricamento di immagini) devono essere indirizzate a server back-end dedicati. Pertanto, è necessario il bilanciamento basato su URL.

So che NginX e HAProxy sono entrambi un proxy inverso open source e / o Load Balancer. Poiché HAProxy non supporta SSL, mentre il bilanciamento del carico di Nginx non è buono come HAProxy. Prenderò entrambi.

Quindi, dovrei mettere Nginx (come proxy inverso) nella parte anteriore di HAProxy (come bilanciamento del carico) o opposto?

Grazie

Risposte:


7

Se prevedi di avere tutti i server Web disponibili su HTTPS, dovrai installare Nginx davanti a HAProxy. Con tale configurazione, Nginx gestirà tutto il lavoro SSL e invierà il traffico HTTP decrittografato direttamente al frontend HAProxy, che quindi caricherà le richieste sui server Web in base alle regole specificate.

L'idea di utilizzare LVS, come menzionato da Womble, è che è un po 'meno invadente poiché non mantiene una connessione tra il tuo server Web e il client che accede al sito. D'altra parte, LVS ti fornirà solo un semplice bilanciamento del carico e non ti consentirà di inoltrare richieste in base all'estensione del file, all'URL richiesto, alle intestazioni, ecc. Ecco perché HAProxy viene utilizzato in molte situazioni.

Se hai bisogno solo di SSL su un server (senza bilanciamento del carico), puoi usare HAProxy in modo sicuro per tutto senza usare Nginx. D'altra parte avrai un problema con l'impossibilità di vedere l'indirizzo IP di origine del client nei log HTTPS del server web (perché HAProxy riscrive quell'indirizzo). L'IP sarà nei log HAProxy se lo abiliti comunque;)


Grazie. poiché "Alcune richieste (ad esempio il caricamento di immagini) devono essere indirizzate a server back-end dedicati. Pertanto, è necessario il bilanciamento basato su URL." (come ho aggiornato la domanda). LVS potrebbe non soddisfare i miei requisiti.
Morgan Cheng,

A proposito, il nascondere l'indirizzo IP da HAProxy è solo per HTTPS o anche per HTTP?
Morgan Cheng,

@Morgan, Hiding of ip è solo per HTTPS.

È solo per i back-end in modalità TCP, quindi tutto ciò che non è HTTP non vedrà l'indirizzo IP poiché viene inviato come intestazione HTTP (X-Forwarded-For).

Non esattamente. Haproxy può connettersi al server utilizzando l'indirizzo IP del client, ma ciò richiede la cooperazione del kernel (ad esempio: funzione TPROXY). Questo dovrebbe essere evitato laddove possibile però.
Willy Tarreau,


1

Dovresti semplicemente usare nginx, fa tutto il necessario come server web frontend. Se è necessario il bilanciamento del carico front-end, utilizzare un bilanciamento del carico L3 come Linux Virtual Server , perché non interferisce come fa HAproxy. Utilizzare HAproxy, se necessario, per eseguire il bilanciamento del carico dietro le quinte, come il bilanciamento delle richieste a un pool di lavoratori back-end.


2
Si dice che il bilanciamento del carico di NginX sia semplice, solo un approccio round robin. Questo è il motivo per cui sto prendendo in considerazione HAProxy.
Morgan Cheng,

1
Si dice correttamente; L'ho detto io stesso. Ecco perché non consiglio di usare nginx come bilanciamento del carico e non troverai alcuna menzione dell'uso di nginx come bilanciamento del carico in questa (o in qualsiasi altra) mia risposta.
Womble

Questo è solo se hai paura di usare la tua compilazione dal sorgente (o dalle porte su FreeBSD). Esistono più moduli di terze parti che migliorano il bilanciamento del carico: wiki.nginx.org/3rdPartyModules
Martin Fjordvald

2
Migliora, sì. Rendi adeguato, no. I miei pensieri su questo possono essere trovati in hezmatt.org/~mpalmer/blog/2011/07/24/… (cercare "non carino").
womble
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.