Background Decoration Top Left

Cloudflare Workersからのリクエストだけ308が返ってredirect loopに陥る

February 1st, 2024

2日溶かした。
k8sのingress-controllerの下でサーバーを動かしていたところ、Cloudflare Workers経由のhttpsリクエストに対してだけ308を返す状況に陥った。 手元からcurlでhttpsリクエストを送るとちゃんと200が返ってきていて、何故かCloudflare Workersからfetchするときだけredirect loopに陥る。

原因

  • HTTPSを送っているつもりがHTTPでリクエストを送っていた。
  • https://で始まるURLを指定しても、CloudflareのEncryption Modeの設定次第ではhttpで送られる。
今回発生した事象の流れは以下の通り。
  1. Cloudflare Workersでfetch APIを使ってhttpsでデータを取得しようとする。
  2. Encryption Modeの設定がFlexになっているとプロトコルがhttpsからhttpに自動で変換される。
  3. k8sのIngressがリクエストを受け取るがhttpなのでhttpsにリダイレクトするよう308を返す。
  4. 2に戻るので無限ループ
同じ罠に嵌る人が多いのかGoogleで調べると上の方に公式のドキュメントが出てくるが、 k8s側の設定を疑っていてしっかり読んでいなかった。

Share this page!

  • X Logo
  • Bluesky Logo
  • Hatena Logo

Next

Arrow

Cloudflare PagesにCLI経由でアップロードする

Previous

Arrow

honoのテストケースで環境変数を利用する