Alibaba Cloud CDN によって高速化されたドメイン名にアクセスすると、ブラウザで ERR_TOO_MANY_REDIRECTS エラーが報告されることがあります。このエラーは、CDN とオリジンサーバーがリダイレクトループに陥ったときに発生します。このトピックでは、原因を特定し、問題を解決する方法について説明します。
「このページは動作していません。example.com でリダイレクトが繰り返し行われました。(エラー: ERR_TOO_MANY_REDIRECTS)」

このエラーは、一般的に以下の 2 つの CDN の設定ミスが原因で発生します。
原因 1: オリジンに HTTPS リダイレクトがあるにもかかわらず、オリジンサーバーのポートが 80 に設定されている
原因 2: back-to-origin プロトコルが HTTP に設定されている
ご利用の構成にどちらが該当するかを特定し、修正を適用した後、両方のキャッシュをクリアします。
リダイレクトループの発生原因
CDN は、クライアントリクエストが HTTPS であっても、デフォルトでは HTTP 経由でオリジンからコンテンツをフェッチします。オリジンに HTTP から HTTPS へのリダイレクトルールが設定されている場合、オリジンは 301 または 302 リダイレクトを CDN に返します。CDN はそれを受けて再度 HTTP リクエストを送信し、ブラウザのリダイレクト上限を超えるまでこのループが繰り返されます。
最も一般的なシナリオは以下の通りです。
クライアントが HTTPS リクエスト (ポート 443) を
https://example.alibabacloud.com/のような高速化ドメイン名に送信します。CDN はデフォルトで HTTP (ポート 80) 経由でオリジンサーバーからコンテンツをフェッチし、
http://example.alibabacloud.com/をリクエストします。オリジンサーバーには HTTP から HTTPS へのリダイレクトルールが設定されており、HTTPS の URL を指す 301 または 302 状態コードを返します。
クライアントはリダイレクトに従い、新しい HTTPS リクエストを送信します。CDN は再び HTTP 経由でオリジンからコンテンツをフェッチします。
このサイクルは、ブラウザのリダイレクト上限に達するまで繰り返されます。
リダイレクトループの修正
ご利用の構成に該当する原因を特定し、対応する修正を適用します。
原因 1: オリジンに HTTPS リダイレクトがあるにもかかわらず、オリジンサーバーのポートが 80 に設定されている
これは最も一般的な原因です。CDN は HTTP (ポート 80) 経由でコンテンツをフェッチし、オリジンサーバーは HTTP リクエストを HTTPS にリダイレクトするため、ループが発生します。
修正: オリジンサーバーのポートを 443 に変更する
CDN コンソールにログインします。
左側のナビゲーションウィンドウで、ドメイン名 をクリックします。
対象のドメイン名を見つけ、操作 列の 管理 をクリックします。
オリジンサイト情報 セクションで、編集 をクリックします。
ポートを
443に変更し、OK をクリックします。
原因 2: back-to-origin プロトコルが HTTP に設定されている
Back-to-Origin プロトコル が有効で HTTP に設定されている場合、クライアントが HTTPS を使用していても、CDN は常に HTTP リクエストをオリジンに送信します。これがオリジンの HTTP から HTTPS へのリダイレクトと組み合わさることで、同様のループが発生します。
お使いのドメインでBack-to-Origin プロトコルが有効になっていない場合は、このセクションをスキップしてください。
修正: back-to-origin プロトコルを HTTPS に設定する
CDN コンソールにログインします。
左側のナビゲーションウィンドウで、ドメイン名をクリックします。
対象のドメイン名を見つけ、操作 列の 管理 をクリックします。
左側のナビゲーションツリーで、Back-to-Origin 設定 をクリックします。
設定 タブで、 Back-to-Origin プロトコル を探し、 設定 をクリックします。
プロトコルタイプを [HTTPS] に設定し、[OK] をクリックします。
[HTTPS] に設定すると、クライアントが使用するプロトコルに関係なく、CDN は常に HTTPS 経由でオリジンからコンテンツをフェッチします。これにより、クライアントが HTTP を使用した場合でもリダイレクトループが解消されます。
プロトコルタイプをクライアントのプロトコルに従うように設定しないでください。このオプションはクライアントリクエストのプロトコルを反映します。クライアントが HTTP リクエストを送信すると、CDN は HTTP 経由でオリジンからフェッチするため、オリジンが HTTP から HTTPS へのリダイレクトを強制している場合、ループは解消されません。
キャッシュされたリダイレクトのクリア
修正を適用した後、CDN キャッシュとブラウザキャッシュの両方をパージします。CDN ノードとブラウザは 301 または 302 リダイレクト応答をキャッシュしている可能性があり、CDN 設定を更新した後でも、これらのキャッシュがクリアされるまで応答を再生し続けます。
CDN キャッシュのパージ
Alibaba Cloud CDN コンソールにログインします。
左側のナビゲーションウィンドウで、リフレッシュと プリフェッチ をクリックします。
アクション を パージ に、操作方法 を ディレクトリ に設定します。
ドメインのベース URL を入力します。URL は
https://またはhttp://で始まり、/で終わる必要があります。たとえば、高速化ドメイン名がhttps://www.example.com/image/static/1.pngの場合、https://www.example.com/と入力します。送信 をクリックします。
レコード タブで進捗を確認します。
ブラウザキャッシュのクリア
ブラウザは 301 および 302 リダイレクト応答をキャッシュし、ローカルで再生するため、CDN を完全にバイパスします。CDN 設定を修正した後は、ブラウザキャッシュをクリアしてください。
Chrome を例に説明します。
「その他」 アイコン
>
[閲覧履歴の削除] をクリックします。[1 時間以内] や [全期間] などの期間を選択します。
[キャッシュされた画像とファイル] (必須) を選択します。
[データを削除] をクリックします。
修正の確認
いずれかの方法を使用して、リダイレクトループが解決されたことを確認します。
curl: 次のコマンドを実行し、応答に
Locationヘッダーが含まれているかどうかを確認します。Locationヘッダーが存在しない場合、問題は解決されています。https://www.example.com/をご利用の高速化ドメイン名に置き換えてください。curl -I https://www.example.com/シークレットモード: 新しいシークレットウィンドウまたはプライベートブラウジングウィンドウを開き、高速化ドメイン名にアクセスします。シークレットウィンドウにはキャッシュされたリダイレクトがないため、結果は現在の CDN 設定を反映します。