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?
quelle
Antworten:
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
.htaccess
versuchen 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 Balancers
und ich würde mir vorstellen, dass Sie sehen werdenPort Configuration
, was etwas in der Art von sagt443 forwarding to 80 (HTTPS, Certificate: blah)
quelle
Versuchen Sie, dies zu Ihrem
httpd.conf
oder einem hinzuzufügen.htaccess
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
)quelle
fastcgi_param HTTPS on;
Laut Amazon hier https://d0.awsstatic.com/whitepapers/deploying-wordpress-with-aws-elastic-beanstalk.pdf ist das Update:
Ich hatte immer noch die Endlosschleife und habe meine WordPress-Konfiguration wie folgt geändert:
zu:
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
quelle
Ich zitiere mich aus einem anderen hilfreichen Beitrag unter /server//a/858308/450836 :
Für den Nicht-SSL-ELB-Listener verwende ich eine separate Konfiguration, um den gesamten Datenverkehr als Standard-Listener an https umzuleiten.
quelle
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:
quelle
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
quelle