Erzwingen Sie HTTPS mit AWS Elastic Load Balancer

7

Ich muss den gesamten eingehenden HTTP-Verkehr auf meinem elastischen Load Balancer an HTTPS umleiten.

Ich bin müde mit Apache mod_rewrite:

 RewriteEngine On
 RewriteCond %{HTTP:X-Forwarded-Proto} !https
 RewriteRule !/status https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

Diese Regel sollte den vom Load Balancer hinzugefügten X-Forwarded-Proto-Header nutzen und den Browser des Benutzers anweisen, die HTTPS-Version derselben URL anzufordern.

Bisher funktioniert es nicht (es erfolgt keine Umleitung).

Was mache ich falsch?

Gibt es einen besseren Weg, dies zu tun?

BEARBEITEN:

Dies funktionierte schließlich:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule ^/(.*)$ https://%{SERVER_NAME}/$1 [R=301,L]
panos2point0
quelle

Antworten:

5

Ich gehe also davon aus, dass Sie die ELB so eingestellt haben, dass sie Datenverkehr sowohl auf HTTP / 80 als auch auf HTTPS / 443 akzeptiert, aber alle an HTTP weiterleitet.

Wenn Sie Ihre Methode verwenden möchten (die clever ist), sind Sie sicher, dass das, was Sie erhalten, nicht %{X-Forwarded-Proto}der Fall ist - das HTTP:Präfix erscheint mir seltsam. Davon abgesehen sieht das für mich richtig aus.

Wenn sich dies in einem virtuellen Host oder in der Hauptserverkonfiguration befindet und es immer noch nicht funktioniert, können Sie hinzufügen

RewriteLog rewrite-log
RewriteLogLevel 3

Schauen Sie dann in die Datei, um rewrite-logzu sehen, was tatsächlich los ist. Diese Datei kann unglaublich ausführlich sein, beginnen Sie mit niedrigeren Ebenen. Die Protokollierung kann nicht aus .htaccessDateien initiiert werden.

(Ich würde vorschlagen, dass Sie die Flags auf dem setzen, RewriteRule [R=301,L]die den Server veranlassen, eine 301-Antwort zurückzusenden, die Suchmaschinen anweist, die Umleitung als permanent zu betrachten und ihre Links entsprechend zu aktualisieren.)

Tom Harrison Jr.
quelle
Vielen Dank für die Antwort. Es sieht so aus, als ob [R = 301, L] Teil der Lösung war.
panos2point0
2
Ich bin froh, dass Sie etwas gefunden haben, das funktioniert hat, aber die Flags [L,R]sollten in Ordnung sein, außer dass die nackten Reinen http 302-Status zurückgeben. Die Reihenfolge der Flaggen sollte keine Rolle spielen. Wahrscheinlicher ist, dass es sich um eine Änderung handelt, RewriteRuledie sich in zweierlei Hinsicht unterscheidet: 1) Es werden keine http-Anforderungen /statusmehr umgeschrieben , und 2) es wird eine Erfassungsgruppe und eine Rückreferenz ( (.*)dann $1) anstelle der %{REQUEST_URI}Variablen verwendet. Für andere könnte es hilfreich sein zu sehen, ob die Flaggen wirklich die Ursache waren, oder vielleicht war es etwas anderes.
Tom Harrison Jr.
1
Ich glaube, ich habe es auf die Verwendung von! = Statt! Eingeschränkt.
panos2point0
HTTP: X-Forwarded-Proto und X-Forwarded-Proto haben beide für mich funktioniert.
Jaredsten
1

Ich wollte nur meine Erfahrung hinzufügen, als ich stundenlang kämpfte, bevor mir klar wurde, dass meine Herzschlagdatei einen nicht entkoppelten Punkt enthielt (/alive.html). Duh.

Das zweite Problem war, dass die Hauptdomäne nicht umleitete, sondern Dateien. Also leitete http://domain.com/hello.html zu https://domain.com/hello.html um , http://domain.com jedoch nicht.

Folgendes habe ich in meine .htaccess-Datei eingefügt, die für mich funktioniert hat:

RewriteEngine On
# SSL connection forced
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{REQUEST_URI} !^/alive\.html$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
iopener
quelle