Ich verwende HAProxy für den Lastenausgleich und möchte nur, dass meine Website https unterstützt. Daher möchte ich alle Anforderungen an Port 80 an Port 443 umleiten.
Wie würde ich das machen?
Bearbeiten: Wir möchten auf https zur gleichen URL umleiten, wobei die Abfrageparameter beibehalten werden. Daher würde http://foo.com/bar zu https://foo.com/bar umleiten
redirect scheme https code 301 if { hdr(Host) -i www.mydomain.com } !{ ssl_fc }
http-request redirect scheme https code 301 if !{ ssl_fc }
. In der Dokumentation zur http-Umleitung in ALOHA HAProxy 7.0 wird sogar erwähnt, dass " die Syntax beider Anweisungen dieselbe ist, dh, die Umleitung wird jetzt als Legacy betrachtet und Konfigurationen sollten in das http-Anforderungsumleitungsformular verschoben werden ". Ich schließe, ohne ganz sicher zu sein, dass die gleiche Erklärung für die neueren Versionen der Open-Source-Version von HAProxy gilt.Ich habe nicht genug Ruf, um eine frühere Antwort zu kommentieren, daher veröffentliche ich eine neue Antwort, um Jay Taylors Antwort zu ergänzen. Grundsätzlich führt seine Antwort die Weiterleitung durch, eine implizite Weiterleitung, was bedeutet, dass eine 302 (temporäre Weiterleitung) ausgegeben wird. Da die Frage jedoch angibt, dass die gesamte Website als https bereitgestellt wird, sollte die entsprechende Weiterleitung eine 301 (permanente Weiterleitung) sein ).
Es scheint eine kleine Änderung zu sein, aber die Auswirkungen können je nach Website enorm sein. Mit einer permanenten Weiterleitung informieren wir den Browser, dass er nicht mehr von Anfang an nach der http-Version suchen sollte (um zukünftige Weiterleitungen zu vermeiden) - eine Zeitersparnis für https Websites. Es hilft auch bei der Suchmaschinenoptimierung, teilt aber nicht den Saft Ihrer Links.
quelle
So leiten Sie den gesamten Datenverkehr um:
redirect scheme https if !{ ssl_fc }
So leiten Sie eine einzelne URL um (bei mehreren Frontends / Backends)
redirect scheme https if { hdr(Host) -i www.mydomain.com } !{ ssl_fc }
quelle
Laut http://parsnips.net/haproxy-http-to-https-redirect/ sollte es so einfach sein, Ihre haproxy.cfg so zu konfigurieren, dass sie Folgendes enthält.
quelle
Der beste garantierte Weg, um alles http zu https umzuleiten, ist:
Mit 'Code 301' ist dies etwas ausgefallener, aber Sie können den Kunden auch darüber informieren, dass es permanent ist. Der Teil 'mode http' ist bei der Standardkonfiguration nicht unbedingt erforderlich, kann aber nicht schaden. Wenn Sie
mode tcp
im Standardbereich (wie ich) haben, dann ist es notwendig.quelle
Eine leichte Variation der Lösung von user2966600 ...
So leiten Sie alle außer einer einzelnen URL um (bei mehreren Frontends / Backends):
quelle
Wie Jay Taylor sagte, hat HAProxy 1.5-dev die
redirect scheme
Konfigurationsanweisung, die genau das erfüllt, was Sie brauchen.Wenn Sie jedoch 1.5 nicht verwenden können und HAProxy aus dem Quellcode kompilieren möchten, habe ich die
redirect scheme
Funktionalität zurückportiert , damit sie in 1.4 funktioniert. Sie können den Patch hier herunterladen : http://marc.info/?l=haproxy&m=138456233430692&w=2quelle
quelle
In neueren Versionen von HAProxy wird die Verwendung empfohlen
um den http-Verkehr auf https umzuleiten.
quelle
Wenn Sie die URL neu schreiben möchten, müssen Sie den virtuellen Host Ihrer Site ändern und folgende Zeilen hinzufügen:
Wenn Sie jedoch alle Ihre Anforderungen an Port 80 an Port 443 der Webserver hinter dem Proxy umleiten möchten , können Sie dieses Beispiel conf auf Ihrer haproxy.cfg ausprobieren:
Ich hoffe das hilft dir
quelle
Warum verwenden Sie keine ACLs, um den Datenverkehr zu unterscheiden? auf meinem Kopf:
Dies geht über das hinaus, was Matthew Brown geantwortet hat.
Sehen Sie sich die ha-Dokumente an , suchen Sie nach Dingen wie hdr_dom und unten, um weitere ACL-Optionen zu finden. Es gibt viele Möglichkeiten.
quelle
Fügen Sie dies in die HAProxy-Frontend-Konfiguration ein:
quelle
Kann so gemacht werden -
Jeder Datenverkehr, der auf http trifft, wird zu https umgeleitet
quelle
Redirect- Anweisung ist Vermächtnis
Verwenden Sie stattdessen die http-Request-Umleitung
quelle