Wie kann ich HTTP / 2 auf HAProxy aktivieren?

7

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?

    
ssharma 17.11.2016, 13:38
quelle

3 Antworten

22

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 :

%Vor%

Ä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.

    
mikemaccana 15.02.2017, 14:09
quelle
4

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ützt

Hier ist jemand anderes Leitfaden Ссылка

    
Scott Farrell 18.11.2016 21:52
quelle
3

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 :

Die Münchhausen Methode

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

    %Vor%
  • 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.

ASCII-Bild von HTTP/2 -Anforderungsfluss

%Vor%

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.

    
Tino 27.10.2017 13:24
quelle

Tags und Links