CloudflareからCloudRunにカスタムドメインでアクセスするときにERR_TOO_MANY_REDIRECTSとなる件

cloudflare
CloudRun

2024-11-05

#はじめに

今回は、CloudflareからCloudRunにカスタムドメインでアクセスするときにERR_TOO_MANY_REDIRECTSとなる件について説明します。

#目次

#なにが起きたのか

CloudRunでアプリをデプロイし、カスタムドメインを設定しました。
DNSはCloudflareで管理しているため、CloudflareのDNS設定を行いました。

カスタムドメインを設定するとGoogle-Certificates-Bridgeというボットが/.well-known/acme-challenge/xxxというようなURLにアクセスしてきます。
おそらく、設定したカスタムドメインのSSL証明書を取得するための処理だと思われます。LetsEncryptでも同じだと思われます。

ところが、アクセスログをみるとHTTP STATSU: 302となっており、リダイレクトが発生していることがわかりました。
schemaがhttpとなっているため、リダイレクトが発生しているのだと思われます。

直接カスタムドメインに設定したURLにブラウザでアクセスすると、ERR_TOO_MANY_REDIRECTSが発生するがわかりました。

すぐに原因がわからなかったのですが、Cloudflareの暗号化モードがフレキシブルで、CloudRunにプロキシする際に、httpでアクセスしており、CloudRun側でhttpsにリダイレクトしていたということでした。

  • CloudRun

Cloud Run はすべての HTTP リクエストを HTTPS にリダイレクトしますが、TLS はウェブサービスに到達する前に終了します。

  • Cloudflareの暗号化モード:フレキシブル

Cloudflare訪問者と Cloudflare 間の暗号化のみを有効にします。これにより、ブラウザのセキュリティ警告は回避されますが、Cloudflare とオリジン間のすべての接続は HTTP 経由で行われます。

cloudflare encryption mode

つまり下記のような経路で、リダイレクトが発生しているということでした。

エンドユーザ
  ↓ https
Cloudflare(暗号化モード:フレキシブル)
  ↓ httpなのでhttpsにリダイレクトされて、ループしてしまう。
CloudRun

#解決策

Cloudflareのドキュメントによると、フレキシブルモードの場合、Cloudflareとオリジン間のすべての接続はHTTP経由で行われるため、リダイレクトが発生する可能性があるとのことです。

Cloudflareの暗号化設定をフレキシブルからフル(厳密)に変更したら、正常にアクセスできるようになりました。

#参考リンク

#まとめ

今回は、CloudflareからCloudRunにカスタムドメインでアクセスするときにERR_TOO_MANY_REDIRECTSとなる件について説明しました。
Cloudflareの暗号化モードというのが、あまり馴染みがなかったので勉強になりました。