Amazon CloudFront が、指定した時間内にファイルをキャッシュしないのはなぜですか?
最終更新日: 2021 年 11 月 24 日
Amazon CloudFront ディストリビューションでオブジェクトをキャッシュする時間幅を指定したかったので、オリジンに Cache-Control または Expires ヘッダーを追加しました。しかし、CloudFront は指定した期間にオブジェクトのキャッシュを実行しません。さらに、CloudFront がキャッシュを一切行わないこともあります。この原因は何でしょうか?
解決方法
Cache-Control ヘッダーまたは Expires ヘッダーに設定したディレクティブが、互いに矛盾していないことを確認してください。ベストプラクティスとしては、Expires ヘッダーの代わりに Cache-Control max-age ディレクティブを使用します。両方に値を指定した場合、CloudFront では Cache-Control max-age に設定した値のみが有効となります。
さらに、CloudFront ディストリビューションの [Minimum TTL] (最小 TTL)、[Default TTL] (デフォルト TTL)、および [Maximum TTL] (最大 TTL) で設定した値が、Cache-Control ヘッダーまたは Expires ヘッダーと競合しないことを確認してください。
これらのキャッシュ期間設定が互いに競合する場合、CloudFront が設定された時間にオブジェクトをキャッシュしない、あるいは、一切キャッシュを実行しなくなる可能性があります。以下の例のように、互いに矛盾する cache-duration の設定は避けてください。
- [Maximum TTL (最大 TTL)] に 5 分 (300 秒) を設定し、Cache-Control max-age ヘッダーに 1 時間 (3600 秒) を設定した場合、CloudFront は 1 時間ではなく 5 分間、オブジェクトをキャッシュします。
- Cache-Control max-age ヘッダーに 3 時間を設定し、Expires ヘッダーを 1 か月に設定した場合、CloudFront は 1 か月ではなく 3 時間オブジェクトをキャッシュします。
- [Default TTL] (デフォルト TTL)、[Minimum TTL] (最小 TTL)、および [Maximum TTL] (最大 TTL) に 0 秒を設定した場合、オリジンからの最新コンテンツがあることを、CloudFront は常に確認します。
重要: キャッシングヘッダーを使用してオリジンアセットを更新した場合は、CloudFront がオリジンに新しいリクエストを送信した後にのみ、その変更が CloudFront に対し反映されます。CloudFront は、エッジロケーションでキャッシュされたアセットの有効期限が切れると、オリジンに新しいリクエストを送信します。その後、アセットに対する新しいリクエストが、ディストリビューションに対し送信されます。キャッシュされたアセットの有効期限が切れる前に、強制的に CloudFront に更新を反映させるには、キャッシュを無効化します。