Expires
と Cache-Control max-age
オブジェクトのキャッシュを制御するには、Expires ヘッダーフィールドではなく、Cache-Control max-age ディレクティブを使用することをお勧めします。
Cache-Control max-age と Expires の両方の値を指定した場合、CloudFront は Cache-Control max-age の値のみを使用します。
コンテンツがエッジキャッシュに保持される期間の管理 (有効期限) – Amazon CloudFront
Cache-Control
・Expires
と 各種TTLの関係
特に、
最小 TTL > 0
「オリジンが、Cache-Control: no-cache、no-store、および private ディレクティブ、またはこのいずれかをオブジェクトに追加する」
上記の場合
「CloudFront は、CloudFront 最小 TTL の値に対応する期間、オブジェクトをキャッシュに保持します。」
知らないと死人が出そう。
WebSocket と CloudFront
WebSocket でコンテンツを取得するウェブサイト。CloudFront は WebSocket をサポートしていません。
CloudFront をウェブサイトと統合する
冷静に考えれば仕方がない。
CloudFront 独自のHTTPヘッダたち
X-Forwarded-Proto
的なヘッダ- デバイスタイプ: キャッシュヒット率上げるために
UserAgent
をオリジンにフォワードさせない場合に使用 - CloudFront-Viewer-Country
アプリケーション側で個別対応が必要になる。
HTTPリクエストの Host
ヘッダ
【CloudFront】HTTPリクエストのHostヘッダについて (カスタムオリジンを使用する場合)
ログについて
オリジンサーバーのアクセスログは CloudFront でのキャッシュミス時のアクセスのみになるので、
CloudFront ディストリビューションの Logging
設定を有効化して、
S3 に CloudFront のアクセスログを書き出すようにする。
さらに、ログの量次第では、S3に吐き出されたアクセスログのローテーションについても考慮が必要になる。
または、Google アナリティクス等のアクセス解析ツールを導入しても良いでしょう。
キャッシュを無理やり無効化する
ビヘイビア設定にて下記の設定を行えば、ビューアーのリクエストが CloudFront を素通りするようになる。
・Allowed HTTP Method: GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE ・Cache Based On Selected Request Header: All => これを設定すると、Object Caching のところに "When you choose 'All' for 'Cache based on selected request headers', CloudFront doesnt cache your objects. In that configuration, Minimum TTL must be 0 seconds. " というメッセージが表示されてキャッシュが無効化される。 ・Forward Cookies: All ・Query String Forwarding And Caching: Forward all, based on all