Amazon CloudFront ディストリビューションがオブジェクトをキャッシュする時間を指定しようと考えて、オリジンに Cache-Control または Expires ヘッダーを追加しました。しかし、CloudFront が指定した時間においてオブジェクトのキャッシュを実行しない、またはCloudFront がキャッシュを一切行わないことがあります。
解決策
Cache-Control または Expires ヘッダーに設定したディレクティブが互いに競合していないことを確認します。Expires ヘッダーの代わりに Cache-Control max-age ディレクティブを使用することをお勧めします。両方に値を指定した場合、CloudFront は Cache-Control max-age に設定した値のみを使用します。
CloudFront ディストリビューションに設定した [最小 TTL]、[デフォルト TTL]、[最大 TTL] が Cache-Control または Expires ヘッダーと競合しないことを確認します。
これらのキャッシュ期間設定が互いに競合する場合、CloudFront が設定された時間にオブジェクトをキャッシュしない、またはキャッシュをまったく実行しなくなる可能性があります。以下の例のような、互いに競合する cache-duration の設定は避けてください。
- 最大 TTL は 5 分 (300 秒) に設定され、Cache-Control max-age ヘッダーは 1 時間 (3600 秒) に設定されています。この場合、CloudFront はオブジェクトを 1 時間ではなく 5 分間キャッシュします。
- Cache-Control max-age ヘッダーは 3 時間に設定され、Expires ヘッダーは 1 か月に設定されています。この場合、CloudFront はオブジェクトを 1 か月ではなく 3 時間キャッシュします。
- デフォルト TTL、最小 TTL、最大 TTL は 0 秒に設定されています。この場合、CloudFront は常に、オリジンからの最新のコンテンツがあることを確認します。
- 最小 TTL は 60 秒、デフォルト TTL は 300 秒、最大 TTL は 3600 秒に設定されています。オリジンが Cache-Control max-age や Expires などのキャッシュヘッダーを提供しない場合、CloudFront はデフォルトの TTL 期間にわたりオブジェクトをキャッシュします。
重要: キャッシュヘッダーを使用してオリジンアセットを更新した場合、CloudFront はオリジンに対して新しいリクエストを送信した後にのみ変更を反映します。CloudFront は、キャッシュされたアセットがエッジロケーションで有効期限切れになると、オリジンに新しいリクエストを送信します。その後、ディストリビューションはアセットに対する新しいリクエストを受け取ります。キャッシュされたアセットの有効期限が切れる前に、強制的に CloudFront が更新を反映するようにするには、キャッシュを無効化します。
関連情報
オブジェクトキャッシュ
コンテンツがキャッシュに保持される期間 (有効期限) の管理
CloudFront がエラーをキャッシュする時間の制御