Cloudflareのリダイレクトエラーへの対応

host/Cloudflare
概要

CloudflareのFreeプランの設定 | GNU social JP」で*.gnusocial.jpにCloudflareのCDNを適用しました。

その直後あたりに、web.gnusocial.jpの読者からリダイレクトループが発生して表示できないとの報告があり、対応したので紹介します。

以下の投稿群が一連のやり取りでした。

なお、こちらのかたは以下の投稿にある通り、音声再生を分散SNSへの展開を模索していて私のサイトに辿り着いたそうです。

対処方法を紹介します。

確認

対処方法の前に、まず無限リダイレクトの確認方法を紹介します。当初、私の環境からはリダイレクトループを確認できず、認知に遅れてしまったからです。

Google SearchConsoleにサイトを登録している場合、確認できます。

1. [URL検査]-自分のサイトのURLで検索します。

2. [URL検査] 画面が表示されるので、[公開URLをテスト] を選びます。

3. [ページの可用性]-[ページの取得]=[失敗しました リダイレクトエラー] となっていることを確認できます。

対応

Cloudflare + Vercelでのリダイレクトループエラーの解消メモ – Qiita」の内容が今回と同じ問題でした。「ERR_TOO_MANY_REDIRECTS · Cloudflare SSL/TLS docs」でこの問題についてCloudflareも解説しています。

このリダイレクトの問題は一般的に以下の原因で発生するようです。

  1. SSL/TLS Encryption modeの設定ミス
  2. SSL/TLS > Edge Certificatesの設定
  3. リダイレクトルールの設定ミス

今回はこの1番目の問題でした。

ダッシュボード-[Websites]-任意の登録サイト-[SSL/TLS]-[Overview] を開くと現在の [SSL/TLS encryption mode] が表示されます。

ここでモードは以下の4種類があります。

  1. Off: 全てHTTP
  2. Flexible: WebブラウザーとCF間はHTTPS、CFと元サーバー間はHTTP
  3. Full: 全てHTTPS
  4. Full (strict): 全て信頼できるCAのHTTPS

この設定がデフォルトだと [Flexible] になっていたのが原因でした。Flexibleだとリクエスト受信時に、CFが元サーバーにHTTPでリクエストを送信します。その際に、HSTSも含んで元サーバーでHTTPをHTTPSにリダイレクトする処理がある場合、元サーバー→CFにHTTPSにリダイレクト、CF→元サーバーにHTTPでリダイレクトの無限ループが発生します。

回避するには、元サーバーのHTTPSへのリダイレクト設定の削除か、モードの [Full] 以上への変更です。今回は [Full] にすることで解決できました。

結論

Cloudflare設定後のリダイレクトループの対応でした。

元サーバーで一切のHTTPSの対応をしていない場合は、デフォルト設定で何も問題ないのですが、自前でHTTPSの対応を行っていると問題が起こるデフォルト設定でした。ある意味、Cloudflareを前提すると楽な初期設定で盲点でした。

CDNを挟むとこういう問題があるので、設定直後は問題ないか、Google Search Consoleの検索結果など注意したいと思いました。

コメント

Copied title and URL