だいぶ前の話にはなりますが、liteCDNでリダイレクトの無限ループが原因であわやサーバーダウンになりかけた事例があります。
CDNが普及してきたからこそ、CDN障害が起きてしまうとその影響は計り知れません。
もちろん現在では、liteCDNがリダイレクトの無限ループでサーバーがダウンしないように対策済みなのでご安心ください。
今回は、リダイレクトループとは何なのか。またどうしてそのようなことになるのかをお話したいと思います。
目次
リダイレクトの無限ループとは?
リダイレクトとは、アクセスのあったページから別のページに転送することです。
リダイレクトをする理由
・コンテンツの移転をしたので、旧コンテンツから新コンテンツに転送させたいとき
・ユーザーエイジェントによる表示コンテンツの振り分けたいとき
・「メンテナンス中」といったサイトのリニューアルのとき
・SEOの対策(上位表示されているURLは変更したくない)をしたいとき
・サイトのドメインを変更したとき
・キャンペーンやセールサイトへ誘導したいとき
その転送が、何かしらの原因で永遠と繰り返される現象をリダイレクトループといいます。
リダイレクトループに陥ったコンテンツを表示した場合、無限ループに陥っているからといってブラウザがビジー(応答なし)になることはありません。
リダイレクトループになると、上画像のように「ERR_TO_MANY_REDIRECTS(リダイレクトが多すぎて表示できないよ!)」というエラーが表示されます。
ブラウザの判断によってエラーとなるので、ビジー状態(フリーズ)になってユーザーに迷惑をかけることはないものの、エラーが表示されるのでコンテンツイメージを悪くする可能性はあるかもしれません…。
コンテンツ運用の中でリダイレクトは有効な手段である反面、リダイレクトループの危険があることも知っておいてください。
どうしてリダイレクトループが起きるの?
ここでは、liteCDNがサーバーダウンになりかけたケースを含め、リダイレクトループの原因を紹介します。
HTTPとHTTPSの判定でリダイレクトループ
2021年9月の「Chrome94の仕様変更」では、Chrome(ブラウザ)のオプションで、「HTTPSファーストモード」機能が追加されました。
HTTPSファーストモードとは、HTTPS(SLL化)をしていないサイトは「安全ではない可能性がある」と判断して、サイトを表示しない設定です。
その影響もあるのか、急激に進んでいるのがコンテンツのSSL化です。
コンテンツをSSL化する方法のひとつにCDNの導入がありますが、今回はそれが原因でリダイレクトループが起きてしまいました。
CDNを経由したSSL化で起きたリダイレクトループ
CDNは、付加を分散するためにロードバランサー(略称:LB)という、外部からのアクセスを複数サーバーに振り分ける機器を経由しています。
問題は、ロードバランサーはHTTP(ポート番号:80)でアクセスしてしまうこと。
これによって、HTTPSでアクセス→HTTPでアクセス→HTTPSへリダイレクト→HTTPSでアクセス…とリダイレクトループに陥ってしまうのです。
幸いliteCDNでは障害となる前に検知して対応を取ることができましたが、今後もどのような障害が起きるかわからないので気を引き締めなければならないと考えるきっかけとなった事例です。
ポート番号って何?
インターネットの世界では、IPアドレスによってコンピューターの識別を行っています。
しかし、IPアドレスだけでは何のパケット(データ)が送受信されたのかを判断できません。
そこで登場するのが 0~65,535 までの数値で管理されているポート番号です。
TCP/IP(通信プロトコル)ではサービス単位にポート番号が割り当てられており、IPアドレスとポート番号を指定することで、送り先のコンピューターに何のパケットが送られたのかを識別させることができます。
ポート番号は各々に設定することも可能ですが、とくに設定していない場合は、以下のポート番号が使用されます。
プロトコル | ポート番号 |
HTTP | 80番 |
HTTPS | 443番 |
SMTP | 25番 |
DNS | 53番 |
POP3 | 110番 |
FTP | 21番 |
どうしたらリダイレクトループを回避できるの?
今回のケースでは、ウェブブラウザからのアクセスなのか、CDNからのアクセスなのかを判別できれば無限リダイレクトループを回避できます。
どうやって判別するの? それを実現できるのが、ヘッダー情報の「X-Forwarded-Proto」です。
CDNを経由した場合、HTTPヘッダーに「HTTP とHTTPSのどちらのアクセスなのか」という情報をX-Forwarded-Proto に格納して付加します。
そこで、CDNからのアクセスでかつ X-Forwarded-Proto が「HTTPS」の場合はリダイレクトさせないように設定する必要があります。
そのためには、WordPressの wp-config.php に以下の記述を追加してください。
define(‘FORCE_SSL_ADMIN’, true);
if ( ! empty( $_SERVER[‘HTTP_X_FORWARDED_PROTO’] ) && $_SERVER[‘HTTP_X_FORWARDED_PROTO’] == ‘https’ ) {
$_SERVER[‘HTTPS’]=’on’;
}
また、. htaccess を以下のように記述します。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
.htaccessの設定による無限ループ
サイトを運営している方なら一度は「. htaccess(ドットエイチティアクセス)」という言葉を聞いたことがあるかもしれません。
.htaccess とは、リダイレクトやホームページのパスワード認証(BASIC認証)など、ウェブサーバーの基本的行動を制御するファイルです。
記述ひとつで旧ドメインから新ドメインへの移行(リダイレクト)させることができるので便利な反面、誤った書き方をすればリダイレクトループに陥ってしまう危険性もあります。
よくありがちなのが、サブディレクトリに新規ドメインを取得してしまった場合です。
上記のように、元々ルートディレクトリにサイトを作成していたが、複数サイトを運用することにしたので、サブフォルダに新ドメインを割り当てたというケース。
Redirect permanent / https://www.new.net/
.htaccess はルートディレクトリが優先して読み込まれるので、元々の公開ディレクトリがルートディレクトリにある場合、新ドメイン→新ドメイン→新ドメイン…というようなリダイレクトループが発生してしまいます。
プラグインによるリダイレクト設定
WordPressには便利なプラグインが用意されていますが、そのプラグインが悪さをしてリダイレクトループを起こすことがあります。
これらはプラグインのインストールやアップデートのタイミングで起きることが多いです。
そのプラグイン単体、もしくは複数のプラグインが合わさって原因となることもあり、急にリダイレクトループが起きるようになったら、すべてのプラグインを停止してその原因を探るしかありません。
リダイレクトループをチェックしてくれるツール
自身のコンテンツのリダイレクトを簡単に確認できる方法があります。
それは、「リダイレクトチェック」というウェブツールで誰でも無料で、しかも登録しなくても利用できます。
使い方も簡単で、リダイレクトされているか調べたいURLを入力して[チェックする]ボタンをクリックするだけ!
このように、リダイレクトされているページを簡単にチェックできます。
もしこの結果で多数のページをリダイレクトしているのなら、一度見直してみるのもよいかもしれませんね。
POINT!
liteCDNでは、「http://」でアクセスされた場合、「https://」にリダイレクトするため、上記と結果となっています。
※「https://」へ強制リダイレクトを行うかは、ダッシュボードにて簡単に設定可能です。
おわりに
liteCDNでは、「強制リダイレクト設定」が標準装備されているので、リダイレクト設定を忘れていた場合でもユーザーに安全な通信を提供することができます。
もしCDNでSSL化を考えているのなら、ぜひliteCDNをご検討してください。お問い合わせもお待ちしております!