Endless Redirect Loop mit AWS ELB und WordPress-Site unter Verwendung des WordPress-https-Plugins

11

Ich habe eine AWS ELB so konfiguriert, dass sie auf meinen Ubuntu-Server verweist, auf dem Wordpress 3.2.1 ausgeführt wird. Auf dem Server hat alles super funktioniert, bis ich es hinter einen Load Balancer gestellt habe.

Ich habe den Load Balancer so eingerichtet, dass Port 80 an Port 80 und Port 443 an Port 80 weitergeleitet werden.

Ich richte meine virtuelle Hosts-Datei ein, um nach den Headern des Elbs zu suchen:

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

Wenn ich jetzt zu einer https-URL gehe, erhalte ich folgende Meldung:

Diese Webseite hat eine Weiterleitungsschleife.
Die Webseite unter https://mywebsite.com/securepage/ hat zu zu vielen Weiterleitungen geführt

Sobald ich das WordPress https Plugin deaktiviere
( http://wordpress.org/extend/plugins/wordpress-https/ )
Die Seiten funktionieren, sind aber jetzt voller gemischter Inhalte. Seiten, die https sein sollten, sind nicht mehr https.

Sobald ich direkt auf den Server zugreife, anstatt über das Elb, funktioniert es wieder.

Irgendwelche Ideen, wie ich das mit einer AWS ELB zum Laufen bringen könnte?

ChickenFur
quelle
Hast du den Permalink aktualisiert? Normalerweise müssen wir die Permalink-Einstellung auf WordPress
aktualisieren

Antworten:

13

Ich würde eine Vermutung wagen, ohne dass Sie Ihre ELB-Konfiguration veröffentlichen, dass die ELB HTTPS-Verkehr (443 / tcp) über HTTP (80 / tcp) an die EC2-Instanz umleitet. Dann .htaccessversuchen Sie und das Plugin, es zurück zu HTTPS umzuleiten, da es über HTTP angezeigt wird.

Werfen Sie einen Blick auf Ihre EC2-Konsole unter Network & Security > Load Balancersund ich würde mir vorstellen, dass Sie sehen werden Port Configuration, was etwas in der Art von sagt443 forwarding to 80 (HTTPS, Certificate: blah)

Jeremy Bouse
quelle
1
Diese Person hier hatte das gleiche Problem. forums.aws.amazon.com/…
ChickenFur
1
und dieser sieht ähnlich aus stackoverflow.com/questions/5741210/…
ChickenFur
Ihr Recht Ich leite 443 bis 80 weiter.
ChickenFur
Ich leite seit über 2 Jahren einen meiner Kunden unter AWS ... Wenn ich Ihre Frage lese, ist das das erste, was mir als Verdächtiger in den Sinn gekommen ist.
Jeremy Bouse
1
Das Ändern der LB von 443 auf 443 hat das Problem behoben :) Danke!
ChickenFur
17

Versuchen Sie, dies zu Ihrem httpd.confoder einem hinzuzufügen.htaccess

SetEnvIfNoCase X-FORWARDED-PROTO "^https$" HTTPS

Wenn Sie den Load Balancer + HTTPS verwenden, ist Ihrem Webserver nicht bekannt, dass HTTPS im Front-End verwendet wird. Versuchen Sie daher weiterhin, zur HTTPS-Site umzuleiten, obwohl HTTPS bereits verwendet wird.

Das Obige übersetzt den Header, den Amazon Load Balancer sendet ( X-Forwarded-Proto: https), in eine Umgebungsvariable, die Wordpress und andere PHP-Skripte verstehen ( HTTPS=1)

AB Carroll
quelle
3
Dies wäre der richtige Weg, da die SSL-Entschlüsselung auf ELB bleibt
toske
1
Wenn Sie auf Nginx sind, wäre eine ähnliche Ergänzung:fastcgi_param HTTPS on;
Akash Budhia
Dieser Beitrag beendete meine stundenlangen Schmerzen ... THX
Daywalker
3

Laut Amazon hier https://d0.awsstatic.com/whitepapers/deploying-wordpress-with-aws-elastic-beanstalk.pdf ist das Update:

/** Detect if SSL is used. This is required since we are terminating SSL either on CloudFront or on ELB */ 
if (($_SERVER['HTTP_CLOUDFRONT_FORWARDED_PROTO'] == 'https') OR ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'))
    {$_SERVER['HTTPS']='on';}

Ich hatte immer noch die Endlosschleife und habe meine WordPress-Konfiguration wie folgt geändert:

define('WP_HOME','http://www.example.com');
define('WP_SITEURL','http://www.example.com');

zu:

define('WP_HOME','https://www.example.com');
define('WP_SITEURL','https://www.example.com');

Dadurch werden Benutzer zu https gezwungen, auch wenn sie http eingeben. Außerdem ist es einfach, die Site offline zu entwickeln, da Sie nur das WP_HOME auf den lokalen Host aktualisieren und https nicht mehr die Standardeinstellung ist

brianlmerritt
quelle
1

Ich zitiere mich aus einem anderen hilfreichen Beitrag unter /server//a/858308/450836 :

Für mich war es ausreichend, $ _SERVER ['HTTPS'] = 'on' zu setzen; in wp-config.php. Ich verwende AWS ELB, das SSL auf der ELB beendet. Daher akzeptiert nginx die Anfrage auf Port 80 (8080 nach dem Lackieren) und es scheint, dass WordPress nicht in der Lage war, damit umzugehen, bis Sie PHP ausdrücklich mitteilen, dass die Site bereits https verwendet ...

Für den Nicht-SSL-ELB-Listener verwende ich eine separate Konfiguration, um den gesamten Datenverkehr als Standard-Listener an https umzuleiten.

Tim
quelle
0

Wie @Tim vorgeschlagen hat, hat dies $_SERVER['HTTPS']='on';in wp-config.php den Trick für mich getan.

Ich habe dies auch zu meiner .htaccess-Datei hinzugefügt, um HTTPS zu erzwingen:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.1$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
Jordan
quelle
0

Behebung von zu vielen Umleitungsproblemen in aws ALB

Aktivieren Sie das Header-Modul und fügen Sie den folgenden Eintrag in der Apache-Konfiguration hinzu

SetEnvIf X-Forwarded-Proto "https" HTTPS = on RequestHeader set HTTPS "on" env = HTTPS

    RewriteEngine On
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
George Ulahannan
quelle