開発メモ
R2カスタムドメインが不要な理由(OG画像配信構成)
背景
Cloudflare R2のバケット設定画面に「カスタムドメイン」という項目があり、「本番環境での使用に推奨されます」と表示されている。OG画像をR2にキャッシュする構成で、カスタムドメインを設定すべきか検討した。
現状の構成
ユーザー → log.eurekapu.com/og/blog/* (Worker) → R2 (og-images バケット)
OG画像はWorker経由でアクセスされ、R2は完全にWorkerのバックエンドストレージとして機能している。
Workerの役割
- 署名検証(
sigパラメータ) - R2キャッシュ確認
- キャッシュミス時の画像生成
- 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
現構成でカスタムドメインを設定した場合の問題
- 署名バイパス: R2に直接アクセスされると署名検証をスキップできる
- 二重のエンドポイント: WorkerとR2両方からアクセス可能になり混乱の元
- キャッシュヘッダー不整合: Workerが付加するヘッダーとR2のデフォルトヘッダーが異なる
まとめ
Worker + R2バックエンドの構成では、Workerが既にカスタムドメイン(log.eurekapu.com)で動作しているため、R2側にカスタムドメインを設定する意味がない。
現状維持(カスタムドメインなし)が正解。