概要
「CloudflareのFreeプランの設定 | GNU social JP」で*.gnusocial.jpにCloudflareのCDNを適用しました。
その直後あたりに、web.gnusocial.jpの読者からリダイレクトループが発生して表示できないとの報告があり、対応したので紹介します。
以下の投稿群が一連のやり取りでした。
@gnusocialjp
— tts.quest (@tts_quest) April 18, 2023
web.gnusocial[.]jpが無限リダイレクトして繋がりません! pic.twitter.com/lQYXEj5t6l
140文字を超えちゃうので、TwitterBlueに加入しているアカウントで返信します。同じ人です。こっちもフォローしてくれると嬉しいです(笑)。以下本文。
— 不確かさ (@uncejp) April 18, 2023
対応ありがとうございます。
dig と whois の結果を見る限り、
対応前:
A: GMO DIGIROCK
AAAA: Cloudflare
対応後:
A: Cloudflare
AAAA:…
情報ありがとうございます。@uncejp の返信は通知が来ておらず、気づくのに遅れてしまいました。Google Search consoleで公開URLを確認すると、たしかにリダイレクトループになっているようでした。cloudflareの設定を見直します。
— ぐぬ管 (GNU social JP管理人) (@gnusocialjp) April 18, 2023
こちらのサイトの情報を元にCFの設定を行うと、URL検査がOKになりました。これでどうでしょうか?お手数おかけして恐縮です…https://t.co/rKvZQS6VMM pic.twitter.com/GWvmtdDILB
— ぐぬ管 (GNU social JP管理人) (@gnusocialjp) April 18, 2023
Cloudflareの設定が必要で、無限リダイレクトになっていました。教えていただいて、気づくことができて対応できました。罠ですね… ぐぬ管 (GNU social JP管理人)|gnusocialjp@gnusocial.jpreplying to ぐぬ管 (GNU social JP管理人)|gnusocialjp@gnusocial.jphttps://twitter.com/gnusocialjp/status/1648311851967721473
なお、こちらのかたは以下の投稿にある通り、音声再生を分散SNSへの展開を模索していて私のサイトに辿り着いたそうです。
おそらく面識は無いと思います。GNU socialについて知ったのも今日が初めてです。
— tts.quest (@tts_quest) April 18, 2023
実は、https://t.co/Yn6qICZtI5 でTwitter上で音声を聞ける仕組みを作っていたのですが、これを分散SNSでも展開できないか検討している過程でサイトにたどり着きました。
技術的な内容以外に興味関心はありません。
対処方法を紹介します。
確認
対処方法の前に、まず無限リダイレクトの確認方法を紹介します。当初、私の環境からはリダイレクトループを確認できず、認知に遅れてしまったからです。
Google SearchConsoleにサイトを登録している場合、確認できます。
1. [URL検査]-自分のサイトのURLで検索します。
2. [URL検査] 画面が表示されるので、[公開URLをテスト] を選びます。
3. [ページの可用性]-[ページの取得]=[失敗しました リダイレクトエラー] となっていることを確認できます。
対応
「Cloudflare + Vercelでのリダイレクトループエラーの解消メモ – Qiita」の内容が今回と同じ問題でした。「ERR_TOO_MANY_REDIRECTS · Cloudflare SSL/TLS docs」でこの問題についてCloudflareも解説しています。
このリダイレクトの問題は一般的に以下の原因で発生するようです。
- SSL/TLS Encryption modeの設定ミス
- SSL/TLS > Edge Certificatesの設定
- リダイレクトルールの設定ミス
今回はこの1番目の問題でした。
ダッシュボード-[Websites]-任意の登録サイト-[SSL/TLS]-[Overview] を開くと現在の [SSL/TLS encryption mode] が表示されます。
ここでモードは以下の4種類があります。
- Off: 全てHTTP
- Flexible: WebブラウザーとCF間はHTTPS、CFと元サーバー間はHTTP
- Full: 全てHTTPS
- 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の検索結果など注意したいと思いました。
詳細プロフィール。SNS: Twitter/GS=gnusocialjp@gnusocial.jp/WP=gnusocialjp@web.gnusocial.jp。2022-07-17からgnusocial.jpとweb.gnusocial.jpのサイトを運営しています。WordPressで分散SNSに参加しています。このアカウントの投稿に返信すると、サイトのコメント欄にも反映されます。
コメント