SSLサイトのWordPressでリダイレクトループのためログインできない
現象
wp-config.phpに以下を記述すると、強制的に管理画面をSSLにすることができる。これを有効にしたところ、リダイレクトループが発生してしまい、ログインできなくなってしまった。
1 | define('FORCE_SSL_ADMIN', true); |
原因
原因としては、SSL判定が正しくなかったからである。WordPress内では以下のような is_ssl() というメソッドが用意されている。
これは $_SERVER[‘HTTPS’]と $_SERVER[‘SERVER_PORT’] を見て、SSLかどうかチェックを行っている。
1 | function is_ssl() { |
実はWordPressを設置した環境が、ロードバランサでSSLを受けて、サーバ側はHTTPでリクエストを受けるような構成のため、
$_SERVER[‘HTTPS’]はonにならないのである。その代わりに $_SERVER[‘HTTP_X_FORWARDED_PROTO’] で判定をする必要がある。
解決策
Administration Over SSLのリバースプロキシを使った例の「Using a Reverse Proxy」のところに解決策が載っている。
wp-config.php に以下を記載するだけ。$_SERVER[‘HTTPS’]を書き換えるってどうなんだ?と思わなくもないが。
1 | define('FORCE_SSL_ADMIN', true); |