ロードバランサー (CloudFlare, AWS ELB, さくらインターネット等) 配下で WordPress サイトの SSL 化を行う方法

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