みなさん、こんにちは!
ブリュの公式ブログ.netにお越しいただきまして、ありがとうございます。
このサイトでは、ITについて特化したサイトを運営しています。
今回は、国内最速のレンタルサーバーConoHa WINGにおいて、常時SSL化しているWordPressが無限リダイレクトを起こす原因と対処方法について紹介します。
対処方法は簡単で、.htaccessからhttpsへのリダイレクトコードの削除と、wp-config.phpへ数行の記述を行うだけなので、ConoHa WINGでリダイレクトループが発生してお困りの方は試してみてください。
目次
ConoHa WING 無限リダイレクトループの対処方法
先に対処方法を書いておきます。
無限リダイレクトの原因については後述しますので、先に正常にWordPressが表示されるよう対処をして、落ち着いてからじっくり読んでください。
.htaccessの記述の削除
他社レンタルサーバーからの移転の場合、.htaccessにおいて、httpからhttpsへリダイレクトを行う記述があると思います。
このコードを削除します。
具体的には以下のコードになります。
1 2 3 4 5 6 7 |
#以下のコードを削除する <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTPS} !=on [NC] RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </IfModule> #以上のコードを削除する |
ConoHa WINGでは、SSL化時にhttpsへ強制的にリダイレクトを行うので、上記のコードは不要になります。
wp-config.phpに追加コードを記述
wp-config.phpに追加コードを記載します。
このコードの意味としては、平文接続されているけど、ちゃんとSSLで接続されていますよと、WordPressに教えてあげるコードになります。
1 2 3 4 5 |
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === "https") { $_SERVER['HTTPS'] = 'on'; define('FORCE_SSL_LOGIN', true); define('FORCE_SSL_ADMIN', true); } |
データベース接続情報の$table_prefixの下ぐらいに記載しておくといいです。
1 2 3 4 5 6 7 |
$table_prefix = 'wp_'; if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === "https") { $_SERVER['HTTPS'] = 'on'; define('FORCE_SSL_LOGIN', true); define('FORCE_SSL_ADMIN', true); } |
↑こんな感じですね。
ConoHa WINGで無限リダイレクトループが発生する原因
ConoHa WINGで無限リダイレクトが発生する原因は、一言でまとめるならSSLの管理サーバーとWordPressの管理サーバーが異なることが原因です。
SSLの管理はリバースプロキシであるNginxで行っています。
ConoHa WINGのサーバーは2段構成となっており、
- Nginxはリバースプロキシ
- ファイルの保存と動的処理はApache
となっています。
ここで面白いのが、SSLの管理はリバースプロキシであるNginxで行っていることです。
- SSLの管理をNginx
- WordPressの保存をApache
で行う関係上、パソコンなどからアクセスすると、NginxまではSSL接続なのですが、NginxからApacheは平文となります。
すると、SSL化しているWordPress、つまりはWordPress設定画面のWordPressアドレスやサイトアドレスがhttpsから始まる場合、Nginxから平文接続されたときに、強制的にhttpsへリダイレクトを行います。
これによって、無限リダイレクトループが発生することになります。
これはConoHa WINGに限らず、SSLの管理サーバーととWordPressのホスティングサーバーが異なる場合には、どのサーバーでも起こりうる問題となります。
無限リダイレクトループの原因をもっと詳しく解説
上記で無限リダイレクトが発生する原因を説明しましたが、図を利用してリダイレクトループの発生の原因の詳細を解説していきます。
一般的なレンタルサーバーの場合
一般的なレンタルサーバーの場合の挙動を見てみましょう。
例えば、Apache単体で用いているレンタルサーバーとします。
この場合、SSLの管理もWordPressの管理も、両方ともApache内で行うことになります。
この時にはWordPressにはSSLで接続されたことが伝わっていますので、無限リダイレクトは生じません。
普通にWordPressを運営できることになります。
ConoHa WINGの場合
ConoHa WINGを含む、SSLの管理とWordPressの管理を分離しているレンタルサーバーの場合を考えてみましょう。
再度書きますが、
- NginxでSSLを管理
- ApacheでWordPressを管理
となっています。
状況的には下の図になります。
パソコンなどの端末は、SSLを管理しているNginxにアクセスします(下図の①)。
ここで重要なのは、SSL接続が成立するのは、端末とSSL管理サーバーの間だけ。
すなわち、パソコンとNginxの間だけSSL接続になります。
そして、NginxはApacheに接続を行います(下図の②)。
この接続はConoHa WINGの社内ネットワークであり、平文接続となります。
SSL化されているWordPressは、平文で接続されるとSSLに強制リダイレクトを行います(下図③)。
NginxはWordPressを管理しているApacheからのリダイレクトの指示を、そのままパソコンに返します(下図の④)。
すると、パソコンはhttpsからhttpsにリダイレクトされるということになり、再びhttpsでアクセスを行います。
こうして、④から①に戻り、無限リダイレクトの現象が発生します。
この問題を防ぐために、WordPressには、平文で接続しているけど、パソコンはちゃんとSSLで接続していますよと伝えるのが、wp-config.phpに記載したコードの意味なのです。
なお、NginxからApacheへの経路において暗号化されていない平文接続となります。
この点において不安を感じる方もいるかもしれませんが、GMOの内部ネットワークであり、部外者が侵入できない領域です。
よって、暗号化されていない平文接続であっても、特にセキュリティ上の問題は発生しません。
まとめ
ここまで、ConoHa WINGにおいて、SSL化されたWordPressの無限リダイレクトループが発生する原因と対処方法について紹介をしてきました。
不具合の原因はリバースプロキシとなるNginxです。
主力となるウェブサーバー自体は大別すれば、Apache、Nginx、LiteSpeedの3種類です。
しかし、日本国内、さらには世界全体でみると様々な組み合わせが行われているほか、レンタルサーバー各社の取り組みによって様々なチューニングが行われています。
正攻法におけるコンピューター技術は発展しきっており、今やキャッシュを有効活用するなど、独自チューニングを行わなければ差が生まれなくなってきています。
WordPressなどのCMSを運営するブロガーにとっては、こうしたレンタルサーバー会社独自のチューニングを理解し、不具合が生じた際には順応するような適切な対処を行っていくことも、必要とされていくのかもしれません。
以上、ConoHa WINGの無限リダイレクトループの原因と対処方法について、参考になれば幸いです。