本サイトのリニューアルに伴って常時SSL化したところ、リダイレクトが繰り返し行われてエラー画面が表示る状態(リダイレクトループ)になってしまいました。解決方法の備忘となります。
サーバ構成
- さくらのレンタルサーバ(スタンダード)
- 独自ドメインによるSSL(さくらSNI 独自SSL)
シンプルなコーポレートサイトのためトラフィックも少なく、さくらのレンタルサーバ(スタンダード)で必要十分な感じです。特別なチューニングはなにもありません。
症状
- 常時SSL化でない場合(httpの場合)は正常表示される
- WordPressと無関係の素のPHPやHTMLは正常表示される
- ローカル環境では正常表示される
どうも さくらのレンタルサーバー + SSL(さくらSNI 独自SSL) + WordPress という環境でのみ発生する現象のようです。
原因
Google検索ですぐにわかりました。さくらSNI 独自SSLがリバースプロキシを介して構成されていることにより、PHPの$_SERVER変数と$_ENV変数に影響がでます。それによりWordPressがリクエストを正常に処理できなくなり、リダイレクトループが発生するようです。
詳細は さくらのレンタルサーバでHTTPS(SNI SSL)な独自ドメインのWordpressサイトを構築する際の注意点 に完璧な形でまとまっています(素晴らしい!)。
解決方法
wp-config.php の先頭で、$_SERVER変数と$_ENV変数をセットすることで解消できます。
1 2 3 4 5 6 7 8 9 |
if (isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR'])) { // 'www.example.com' はダミーにつき置き換えください $_SERVER['HTTPS'] = 'on'; $_ENV['HTTPS'] = 'on'; $_SERVER['HTTP_HOST'] = 'www.example.com'; $_SERVER['SERVER_NAME'] = 'www.example.com'; $_ENV['HTTP_HOST'] = 'www.example.com'; $_ENV['SERVER_NAME'] = 'www.example.com'; } |
補足:さくらSNI 独自SSLを介してリクエストされるときのみ、$_SERVER[‘HTTP_X_SAKURA_FORWARDED_FOR’] という変数がセットされます。そのため、if文による条件分岐を行います。
なお、さくらのレンタルサーバー(スタンダード)だけでなく、下記のサービスも独自SSLの仕様が同じなので、同じ現象が起こりうると思われます。
「SNI SSL」対象サービス
・さくらのレンタルサーバ
- スタンダード
- プレミアム
- ビジネス
- ビジネスプロ
・さくらのマネージドサーバ