web-dev-qa-db-ja.com

AWS ELBおよびwordpressを使用した無限のリダイレクトループwordpress httpsプラグインを使用するサイト

Wordpress 3.2.1を実行しているUbuntuサーバーを指すようにAWS ELBを構成しました。ロードバランサーの背後に置くまで、サーバー上ではすべてがうまくいきました。

ポート80をポート80に、ポート443をポート80に転送するようにロードバランサーを設定しました。

Elbのヘッダーを確認するように仮想ホストファイルを設定します。

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

これで、httpsのURLにアクセスするたびに、次のメッセージが表示されます。

このウェブページにはリダイレクトループが含まれてい
https://mywebsite.com/securepage/ のWebページはリダイレクトが多すぎます

wordpress httpsプラグインを無効にするとすぐに
http://wordpress.org/extend/plugins/wordpress-https/
ページは機能しますが、現在は混合コンテンツでいっぱいです。 httpsであるべきページは、もはやhttpsではありません。

Elb経由ではなく直接サーバーにアクセスするとすぐに再び機能します。

これをAWS ELBと連携させる方法についてのアイデアはありますか?

11
ChickenFur

ELBがHTTPS(443/tcp)トラフィックをHTTP(80/tcp)のEC2インスタンスにリダイレクトしているというELB設定を投稿しないと、私は推測を危険にさらすでしょう。次に、あなたは_.htaccess_であり、プラグインはHTTP経由で表示されているため、HTTPSにリダイレクトしようとしています。

_Network & Security > Load Balancers_の下にあるEC2コンソールを見てください。_Port Configuration_が443 forwarding to 80 (HTTPS, Certificate: blah)の行に沿って何かを言うのがわかると思います

13
Jeremy Bouse

これをhttpd.confまたは.htaccessに追加してみてください

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

ロードバランサー+ HTTPSを使用する場合、WebサーバーはフロントエンドでHTTPSが使用されていることを認識しないため、実際にはHTTPSがすでに使用されている場合でも、HTTPSサイトにリダイレクトしようとし続けます。

上記は、Amazonのロードバランサーが送信するヘッダー(X-Forwarded-Proto: https)を、Wordpressおよびその他のPHPスクリプトが理解できる環境変数(HTTPS=1

17
A.B. Carroll

Amazonによると https://d0.awsstatic.com/whitepapers/deploying-wordpress-with-aws-elastic-beanstalk.pdf 修正は次のとおりです:

/** 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';}

私はまだ無限ループに終わったので、WordPress configを次のように変更しました:

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

に:

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

これにより、ユーザーがhttpを入力した場合でもhttpsが強制されます。さらに、WP_HOMEをローカルホストに更新するだけで、httpsがデフォルトではなくなるため、サイトをオフラインで簡単に開発できます。

3
brianlmerritt

別の役立つ投稿からの引用 https://serverfault.com/a/858308/450836

私にとっては、$ _ SERVER ['HTTPS'] = 'on'を設定するだけで十分でした。 wp-config.php内。 ELBでSSLを終了するAWS ELBを使用しています。したがって、nginxはポート80(ワニスの後の8080)でリクエストを受け入れ、wordpressは、PHPサイトはすでにhttpsを使用しています...

非SSL ELBリスナーの場合、別の構成を使用して、すべてのトラフィックをデフォルトのリスナーとしてhttpsにリダイレクトします。

1
Tim

@Timが示唆したように、これは$_SERVER['HTTPS']='on'; wp-config.phpのトリックでうまくいきました。

これを.htaccessファイルに追加してHTTPSを強制します。

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]
0
Jordan

Aws ALBのリダイレクトの問題が多すぎるのを修正

ヘッダーモジュールを有効にして、Apache設定に次のエントリを追加します

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}
0