nginx+ApacheのリバースプロキシでSSLエラーが出たときの対処法

GCEにてnginx+Apacheのリバースプロキシをしているサイトを制作しました。この中でちょっと無限ループなどが起きたので対処法を書いておきます。

リバースプロキシを使用しているケースとなります

nginx単体や、nginxにてリバースプロキシを使ってnginxにだしているなどのケースで使えるかはわかりません。あくまで現象がおきたのがnginx+Apacheの場合になります。

nginxのconfファイルに追記

ここではdefault.confに追記するとします。

proxy_set_header X-Forwarded-Proto https;

これを追記します。実際に追記したファイルはこんな感じになります。

  proxy_set_header Host $http_host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Host $host;
  proxy_set_header X-Forwarded-Server $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-Proto https;
  location / {
    proxy_pass http://127.0.0.1:8080;  # tornado(アプリケーション・サーバー)が8000でlistenしているとする
        root    /var/www/vhost/site-lab/html;
        ssi  on;
        ssi_last_modified on;
        index  index.html index.htm;


    break;
  }

wp-config.phpに追記

if ( ! empty( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' ) {
       $_SERVER['HTTPS']='on';
}

これ以外に、define(‘FORCE_SSL_ADMIN’, true);を追加する方法もあるみたいですが、このやり方はリバースプロキシには不向きらしいので上記のやり方がいいみたいです。

このページにアクセスする権限がありません

ログインしたらこの画面が出た場合は、書く位置を間違えている可能性があります。デバッグモードの下にかいているかもしれませんので上に持ってきます

/**
 * WordPress データベーステーブルの接頭辞
 *
 * それぞれにユニーク (一意) な接頭辞を与えることで一つのデータベースに複数の WordPress を
 * インストールすることができます。半角英数字と下線のみを使用してください。
 */
$table_prefix  = 'wp_';

if ( ! empty( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' ) {
       $_SERVER['HTTPS']='on';
}

/**
 * 開発者へ: WordPress デバッグモード
 *
 * この値を true にすると、開発中に注意 (notice) を表示します。
 * テーマおよびプラグインの開発者には、その開発環境においてこの WP_DEBUG を使用することを強く推奨します。
 *
 * その他のデバッグに利用できる定数については Codex をご覧ください。
 *
 * @link http://wpdocs.osdn.jp/WordPress%E3%81%A7%E3%81%AE%E3%83%87%E3%83%90%E3%83%83%E3%82%B0
 */

デバッグモードの上に移動すれば問題なく表示されます