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と連携させる方法についてのアイデアはありますか?
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)
の行に沿って何かを言うのがわかると思います
これをhttpd.conf
または.htaccess
に追加してみてください
SetEnvIfNoCase X-FORWARDED-PROTO "^https$" HTTPS
ロードバランサー+ HTTPSを使用する場合、WebサーバーはフロントエンドでHTTPSが使用されていることを認識しないため、実際にはHTTPSがすでに使用されている場合でも、HTTPSサイトにリダイレクトしようとし続けます。
上記は、Amazonのロードバランサーが送信するヘッダー(X-Forwarded-Proto: https
)を、Wordpressおよびその他のPHPスクリプトが理解できる環境変数(HTTPS=1
)
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がデフォルトではなくなるため、サイトをオフラインで簡単に開発できます。
別の役立つ投稿からの引用 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にリダイレクトします。
@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]
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}