Sollte Nginx an der Vorderseite von HAProxy oder gegenüber stehen?

11

Ich habe wenig Erfahrung im Design von Website-Infrastrukturarchitekturen. Ich weiß, dass es situationsspezifisch sein könnte. Die Website soll:

1) Benötigen Sie HTTPS-Unterstützung für einige Seiten (z. B. Anmeldeseite), während andere nur HTTP-Seiten sind.

2) Benötigen Sie mehrere Webserver, damit ein gewisser Lastausgleich erforderlich ist.

3) Benötigen Sie HTTP-Caching und -Komprimierung, um die Leistung zu steigern.

4) Einige Anforderungen (z. B. das Hochladen von Bildern) sollten an dedizierte Backend-Server weitergeleitet werden. Daher ist ein URL-basierter Ausgleich erforderlich.

Ich weiß, dass NginX und HAProxy beide nette Open-Source-Reverse-Proxys und / oder Load Balancer sind. Da HAProxy SSL nicht unterstützt, ist der Nginx-Lastausgleich nicht so gut wie HAProxy. Ich werde beide nehmen.

Sollte ich Nginx (als Reverse-Proxy) vor HAProxy (als Load Balancer) oder gegenüber setzen?

Vielen Dank

Morgan Cheng
quelle

Antworten:

7

Wenn Sie vorhaben, jeden Webserver über HTTPS verfügbar zu machen, müssen Sie Nginx vor HAProxy installieren. Mit dieser Konfiguration übernimmt Ihr Nginx die gesamte SSL-Arbeit und sendet den entschlüsselten HTTP-Verkehr direkt an das HAProxy-Frontend, das dann die Anforderungen basierend auf den von Ihnen angegebenen Regeln an Ihre Webserver verteilt.

Die Idee von LVS, wie von womble erwähnt, ist, dass es etwas weniger aufdringlich ist, da es keine Verbindung zwischen Ihrem Webserver und dem Client hält, der auf die Site zugreift. Auf der anderen Seite bietet LVS Ihnen nur einen einfachen Lastenausgleich und ermöglicht es Ihnen nicht, Anforderungen basierend auf Dateierweiterung, angeforderter URL, Headern usw. weiterzuleiten. Deshalb wird HAProxy in vielen Situationen verwendet.

Wenn Sie nur SSL auf einem Server benötigen (ohne Lastenausgleich), können Sie HAProxy sicher für alles verwenden, ohne Nginx zu verwenden. Auf der anderen Seite tritt ein Problem auf, wenn die Quell-IP-Adresse des Clients in den HTTPS-Protokollen des Webservers nicht angezeigt werden kann (da HAProxy diese Adresse neu schreibt). Die IP befindet sich in HAProxy-Protokollen, wenn Sie sie jedoch aktivieren;)


quelle
Vielen Dank. da "Einige Anforderungen (z. B. das Hochladen von Bildern) sollten an dedizierte Backend-Server weitergeleitet werden. Daher ist ein URL-basierter Ausgleich erforderlich." (als ich die Frage aktualisiert habe). LVS entspricht möglicherweise nicht meinen Anforderungen.
Morgan Cheng
Übrigens, das Verstecken der IP-Adresse durch HAProxy ist nur für HTTPS oder auch für HTTP?
Morgan Cheng
@ Morgan, das Verstecken von IP ist nur für HTTPS.
Es ist nur für Backends im TCP-Modus vorgesehen, daher wird für alles, was nicht HTTP ist, die IP-Adresse nicht angezeigt, da sie als HTTP-Header (X-Forwarded-For) gesendet wird.
Nicht genau. Haproxy stellt möglicherweise über die IP-Adresse des Clients eine Verbindung zum Server her, dies erfordert jedoch eine Kernel-Zusammenarbeit (z. B. TPROXY-Funktion). Dies sollte jedoch nach Möglichkeit vermieden werden.
Willy Tarreau
2

Haproxy seit Version 1.5, das 2014 veröffentlicht wurde , unterstützt SSL wie ein Zauber, einschließlich SNI.

Deshalb würde ich Haproxy vor Nginx stellen.

Greg Dubicki
quelle
1

Sie sollten nur nginx verwenden, es macht alles, was Sie als Frontend-Webserver benötigen. Wenn Sie einen Front-End-Lastausgleich benötigen, verwenden Sie einen L3-Lastausgleich wie Linux Virtual Server , da dieser nicht wie HAproxy im Weg steht. Verwenden Sie HAproxy, wenn dies erforderlich ist, um einen Lastausgleich hinter den Kulissen durchzuführen, z. B. das Ausgleichen von Anforderungen an einen Pool von Backend-Mitarbeitern.

womble
quelle
2
Es wird gesagt, dass der NginX-Lastausgleich ein einfacher Round-Robin-Ansatz ist. Das ist der Grund, warum ich HAProxy in Betracht ziehe.
Morgan Cheng
1
Es wird richtig gesagt; Ich habe es selbst gesagt. Aus diesem Grund empfehle ich nicht, nginx als Load Balancer zu verwenden, und in dieser (oder einer anderen) Antwort von mir wird die Verwendung von nginx als Load Balancer nicht erwähnt.
womble
Dies ist nur möglich, wenn Sie Angst haben, Ihre eigene Kompilierung aus dem Quellcode (oder Ports unter FreeBSD) zu verwenden. Es gibt mehrere Module von Drittanbietern, die den Lastausgleich verbessern: wiki.nginx.org/3rdPartyModules
Martin Fjordvald
2
Verbessern, ja. Machen Sie ausreichend, nein. Meine Gedanken dazu finden Sie in hezmatt.org/~mpalmer/blog/2011/07/24/… (Suche nach "nicht schön").
Womble