nginx+ApacheのリバースプロキシでSSLエラーが出たときの対処法
GCEにてnginx+Apacheのリバースプロキシをしているサイトを制作しました。この中でちょっと無限ループなどが起きたので対処法を書いておきます。
リバースプロキシを使用しているケースとなります
nginx単体や、nginxにてリバースプロキシを使ってnginxにだしているなどのケースで使えるかはわかりません。あくまで現象がおきたのがnginx+Apacheの場合になります。
nginxのconfファイルに追記
ここではdefault.confに追記するとします。 [c] proxy_set_header X-Forwarded-Proto https; [/c] これを追記します。実際に追記したファイルはこんな感じになります。 [c] 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; } [/c]
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
*/
デバッグモードの上に移動すれば問題なく表示されます
