• #R2
  • #Cloudflare Workers
  • #OGP
  • #インフラ
開発メモ

R2カスタムドメインが不要な理由(OG画像配信構成)

背景

Cloudflare R2のバケット設定画面に「カスタムドメイン」という項目があり、「本番環境での使用に推奨されます」と表示されている。OG画像をR2にキャッシュする構成で、カスタムドメインを設定すべきか検討した。

現状の構成

ユーザー → log.eurekapu.com/og/blog/* (Worker) → R2 (og-images バケット)

OG画像はWorker経由でアクセスされ、R2は完全にWorkerのバックエンドストレージとして機能している。

Workerの役割

  1. 署名検証(sigパラメータ)
  2. R2キャッシュ確認
  3. キャッシュミス時の画像生成
  4. Cache-Control、X-OG-Cacheヘッダー付加

結論:カスタムドメインは不要

現在の実装では、R2にカスタムドメインを設定する必要はない

観点説明
Worker経由のアクセスR2は直接公開されていない。log.eurekapu.com/og/blog/* のルートがWorkerに設定済み
署名検証Workerでsigパラメータを検証している。R2を直接公開すると署名をバイパスされるリスク
キャッシュ制御WorkerがCache-Controlヘッダー、X-OG-Cacheヘッダーを付加している

R2カスタムドメインの本来の用途

R2カスタムドメインは、R2を直接CDNとして公開する場合に有用:

  • 大量の静的アセット配信(画像、動画、ファイルダウンロード)
  • Worker処理が不要なシンプルなファイル配信
  • S3互換APIを使わず、HTTPで直接アクセスしたい場合

使用例

# カスタムドメインなし(S3 API経由)
https://xxx.r2.cloudflarestorage.com/bucket/file.png

# カスタムドメインあり(直接HTTP)
https://assets.example.com/file.png

現構成でカスタムドメインを設定した場合の問題

  1. 署名バイパス: R2に直接アクセスされると署名検証をスキップできる
  2. 二重のエンドポイント: WorkerとR2両方からアクセス可能になり混乱の元
  3. キャッシュヘッダー不整合: Workerが付加するヘッダーとR2のデフォルトヘッダーが異なる

まとめ

Worker + R2バックエンドの構成では、Workerが既にカスタムドメイン(log.eurekapu.com)で動作しているため、R2側にカスタムドメインを設定する意味がない。

現状維持(カスタムドメインなし)が正解。

関連ドキュメント