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に追記

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

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

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

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

[php]
/**
* 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
*/
[/php]

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

この記事に関する技術サポート・ご相談

「手順通りにいかない」「自社環境への構築を代行してほしい」など、
インフラ・サーバー周りでハマった際はお気軽にご相談ください。

相談・問い合わせフォームを開く

※ Googleフォームへ移動します(初回相談無料)

個人支援・寄付について

サイトラボでは個人支援・寄付を受けております。ご協力いただける方はお願いいたします。当サイトではビットコインで受け付けております。

  • ビットコイン:3LHnADwZwUbic2L45EnVJEykiG6KfbqrwS