AWS 認定ソリューションアーキテクト – アソシエイトになりました、Katz です。
Chrome がそろそろ非SSLサイトの一部に警告を出し始める時なので、サイトの常時SSL化の波がやってきました。
しかし、意外とハマってしまう落とし穴があります。それは、ロードバランサー。
ロードバランサーの後ろで WordPress を動かしている場合、WordPress に到着した時は、https 接続ではなく、http 通信である場合があります。
https にした瞬間、なぜか WordPress がリダイレクトループ ( Error 310 (net::ERR_TOO_MANY_REDIRECTS): There were too many redirects
) などのエラーが多発する場合があります。
その場合は、サーバーがロードバランサーの配下にある場合があります。
そんなサーバー環境で、自分の WordPress サイトの常時SSL化をしたい場合の解説です。
当てはまるケース
- AWS ELB を使い、ELB と EC2 の間は、http (80) 番通信をしている場合
- ロードバランサーを使い、LB と Web サーバーの間は http (80) 番接続の場合
- CloudFlare の 無料 SSL サービス Flexible SSL を使っている場合
- Cloud9 の開発ツールを使っている場合 (AWS ELB の後ろにあります)
- さくらインターネットのレンタルサーバーで SSL 接続をしたい
STEP1: wp-config.php に下記を追加
まだ [管理画面] – [一般] で URL を https にしないで下さい。インストール時は、http でインストールして下さい。
wp-config.php に下記を追加します。WordPress 4.5 だと、95行目あたりが良いかも。
通常の場合
通常の場合は下記です。
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
$_SERVER['HTTPS'] = 'on';
$_ENV['HTTPS'] = 'on';
}
さくらインターネットの場合
さくらインターネットは、通常とは違うヘッダー情報になるので下記のように特別な記述にする必要があります。
if ($_SERVER['X-Sakura-Forwarded-For']) {
$_SERVER['HTTPS'] = 'on';
$_ENV['HTTPS'] = 'on';
}
STEP2: WordPress 管理画面で、https の設定
WordPress の設定をここで行って下さい。
[管理画面] – [一般] の「WordPress アドレス」「サイトアドレス」を、ここで https に変更して下さい。
参考記事
さくらのレンタルサーバーと concrete5 で常時SSLを実装する方法
https://concrete5.co.jp/blog/sakura-internet-ssl