Wir haben kürzlich von HTTP auf HTTPS umgestellt. Da wir bereits zu HTTPS gewechselt sind, denken wir darüber nach, zu HTTP / 2 zu wechseln, um Leistungsvorteile zu erzielen.
Wie oben erklärt, sind Anfragen zwischen Browser und LB gesichert (HTTPS), während die Kommunikation zwischen LB und App-Server immer noch HTTP verwendet
Was ist die Möglichkeit, HTTP / 2 mit dem aktuellen Setup zu aktivieren? Können wir HTTP / 2 zwischen Browser und LB aktivieren, während die Kommunikation zwischen LB und App-Servern auf HTTP bleibt?
HAProxy 1.8 unterstützt HTTP / 2
Von die 1.8-Ankündigung :
HAProxy 1.8 unterstützt nun HTTP / 2 auf der Clientseite (in den Frontend-Abschnitten) und kann als Gateway zwischen HTTP / 2-Clients und Ihren HTTP / 1.1- und HTTP / 1.0-Anwendungen fungieren.
Sie benötigen die h2
-Direktive in Ihrem haproxy.conf
. Von CertSimple's HAProxy HTTP / 2 und dynamischer Lastenausgleich :
Ältere Versionen von HAProxy
Ältere Versionen von HAProxy wie 1.6 und 1.7 unterstützen nur Pass-Through HTTP / 2 - dh, den Datenverkehr auf einen separaten App-Server zu leiten, der HTTP / 2 unterstützt. Dies ist wesentlich komplizierter - siehe dazu andere Antworten. Um HTTP / 2 zu beenden und den Verkehr zu lesen, benötigen Sie HAProxy 1.8.
haproxy unterstützt http / 2 noch nicht wirklich
Die einzige Unterstützung, die es hat, besteht darin, eine http / 2-Anfrage zu erkennen und den https / tcp443 tcp-Stream an einen Server zu übergeben, der https und http / 2
unterstütztHier ist jemand anderes Leitfaden Ссылка
Folgendes sollte an Ihrem Load Balancer funktionieren, wenn Sie NginX
neben HaProxy
ausführen können. NginX
wird (ab) als reiner SSL-Terminator verwendet, nicht als voll ausgestatteter Webserver, daher wird von diesem NginX
kein Inhalt bereitgestellt.
Warnung: Dies wurde in Eile getan, so dass nichts bewiesen ist, dass dies wirklich funktioniert. Einige Beispiele fehlen, so dass die Links nicht gut sind.
Ich nenne diese Idee nach dem berühmten Bild von Münchhausen, das sich selbst und das Pferd aus einem Moor zieht :
Zuerst führe ein H2-Setup in HaProxy durch wie in der Antwort von Scott Farrell mit folgenden Verbesserungen:
%Vor% Dies führt die Verbindung HTTP/2
zurück zu Ihrer Loadbalancer-Maschine und akzeptiert die decodierten Anforderungen, um Loadbalancing erneut über http-lo
einzugeben.
Starten Sie jetzt auf der LB selbst NginX
, um Port 81
wie in der Konfiguration zu hören
Instanz, um die Verbindung HTTP/2
zu beenden und sie erneut an den loadbalancer zurückzuleiten.
Achten Sie in NginX darauf:
Verwenden Sie das Sende-Proxy-Protokoll in NginX
Beende die SSL mit HTTP/2
in NginX
Proxy alles transparent (aka. dumm) zurück zu HaProxy
port 82
Vergessen Sie nicht, die Client-IP über den X-Forwarded-For
-Header in die Proxy-Anfrage aufzunehmen (Ich weiß nicht, wie ich NginX so konfigurieren kann, dass das "Send Proxy" -Protokoll für ausgehende Proxy-Anfragen verwendet wird) >
Beachten Sie, dass dieses Setup größtenteils statisch ist. Der wechselnde Teil betrifft alle diese Domains und ihre TLS-Zertifikate.
HTTP/2
-Anforderungsfluss Ja, es läuft 2 mal durch HaProxy, aber dank der Geschwindigkeit, mit der HaProxy funktioniert, funktioniert das blitzschnell.
Der wirklich ineffiziente Teil ist, wenn es darum geht, die HTTP/2
Header in einfache HTTP
Header zu dekomprimieren.