.htaccessの問題
原因
Webサーバーが通信を処理する際、Webサーバーは非SSLでの通信を受けることになります。.htaccessに下記のような記載がある場合、リダイレクトループが発生してしまう可能性があります。
.htaccess
(NG記載)
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
対応方法
%{HTTP:X-Forwarded-Proto}で判断させることで、クライアントがELB宛にhttpで接続しているかhttpsで接続しているかを区別することができます。
.htaccess
(推奨の記載)
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
WordPressがhttpsにリダイレクトさせようとしてしまう問題
原因
SSL化したWordPressを表示する際、WordPressのプログラムがhttpで通信を受けたと勘違いして、css等の読み込みをhttpで実施しようとしてしまう可能性があります。トップページをhttps、css等をhttpで読み込んでも、ブラウザでエラーが出ることがあります。
対応方法
(2019年2月25日現在)デフォルトでは、WordPressにはクライアントがELB宛の接続をhttpsで行っているかどうかをチェックする仕組みがありません。クライアントがhttpsでアクセスしているかどうかをPHP側でもチェックさせて、httpsであれば環境変数にもhttpsで接続されている旨を入れてしまいます。
wp-config.php
define('FORCE_SSL_ADMIN', true);
if ( ! empty( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' ) {
$_SERVER['HTTPS']='on';
}