CloudFront: キャッシュキーは Cache Policy、オリジンに渡す値は Origin Request Policy で分けて決める
オリジンが必要とするヘッダー・クエリ・Cookie を全部キャッシュキーに入れるとヒット率が落ちる。キーに入れるのは「レスポンスが変わる値」だけにし、オリジンが見たいだけの値は Origin Request Policy で転送する。
どんなときに使う?
- CloudFront のヒット率が思ったより低い
- オリジンが分析やログのために
User-Agentや追跡用クエリ、Cookie を見たいが、それでキャッシュが細切れになっている - レガシーのキャッシュ設定(「ヘッダーを転送」)から移行するとき
考え方
- Cache Policy: キャッシュキーに含めるヘッダー・Cookie・クエリ文字列と TTL、圧縮の扱いを決める。キーに入れた値は自動的にオリジンへのリクエストにも含まれる
- Origin Request Policy: キャッシュミス時のオリジンへのリクエストに 追加で 含める値を決める。ここに入れた値はキャッシュキーには影響しない
- どちらもキャッシュビヘイビアに付ける。パスごとに組み合わせを変えられる
やり方
- 値ごとに「これが違うとレスポンスの中身が変わるか」を判定する
- 変わる(例: 言語切り替えの
Accept-Language、ページ番号のクエリ)→ Cache Policy に入れる - 変わらないがオリジンが見たい(例: 計測用クエリ、ログ用ヘッダー、CloudFront が付けるビューワー国ヘッダー)→ Origin Request Policy に入れる
- どちらも不要 → 何も入れない(デフォルトではパス・ボディ・
Hostなど最低限しか渡らない)
- 変わる(例: 言語切り替えの
- Header / Query / Cookie はそれぞれ「なし/許可リスト/全部(Cookie・クエリは除外リストも可)」で指定できる。全部入れるのはヒット率を最も下げるので、許可リストを基本にする
- まずマネージドポリシー(例: キャッシュ用の
CachingOptimized、オリジン用のAllViewer系)で足りるか確認し、足りなければカスタムを作る - 変更後はヒット率(CloudFront のレポートやログの
x-edge-result-type)を見て効果を確かめる
注意点
- レガシーのキャッシュ設定ではヘッダーを転送するとそのままキャッシュキーにも入る。ポリシー方式に移すと分けて扱える
- 認証が必要なコンテンツで
Authorizationなどをキーから外すと、別ユーザーのレスポンスが返る事故につながる。外してよいのは中身が変わらない値だけ - gRPC のリクエストはキャッシュされないので、キャッシュ設定は効かない
出典
- @dkfj · 2026-10-20
- AWS ドキュメント: docs.aws.amazon.com / docs.aws.amazon.com