静的Webサイトをホストするためにs3を使用しています。このウェブサイトはs3バケットに配置され、cloudfrontによって配布されます。それはすべてうまく機能しますが、特定のファイルを変更する必要があるときに問題に直面しています。s3バケットのindex.htmlファイルを変更すると、cloudfrontから最新のファイルを取得できません。これらの静的ファイルの有効期限をs3に設定する必要があります。有効期限が切れた後、cloudfrontは新しいバージョンのファイルを探し、新しいファイルを配布しますか?
2 に答える
CloudFrontは、オリジンサーバーから送信されたヘッダーCache-Control
とExpires
ヘッダーを使用して、リソースをキャッシュに保存するかどうか、およびリソースがフレッシュと見なされる期間を決定します。応答ヘッダーを介してキャッシュを制御しない場合、CFは、オリジンからフェッチされた24時間後に、各リソースが失効していると見なします。オプションで、キャッシュ制御ヘッダーを無視し、指定した各リソースに有効期限を使用するようにディストリビューションを構成できます。
オリジンでファイルを更新すると、CFは有効期限が切れるまでそのコピーを更新しようとしません。さまざまな戦略に従って、CFにキャッシュされたコピーを更新させることができます。
1)最も効率が悪く、推奨されないのは、無効化を使用することです。AWSコンソールまたはAPIを介してそれを行うことができます。
Expires
2)ヘッダーを送信して、更新されたコンテンツをいつ検索するかをCFに通知します。たとえば、新しいコンテンツ/バージョンをWebサイトに展開するための厳格なポリシーがあり、ほぼ毎週木曜日に展開を展開することがわかっている場合はExpires
、元のセットから次の展開予定日までの各リソースを含むヘッダーを送信できます。(これはおそらくS3オリジンでは機能しません。)
3)最も効率的で推奨される方法は、バージョン管理されたURLを使用することです。リソースの最終変更時刻をアクセスURIに含めることをお勧めします。EC2またはその他のオリジンが動的コンテンツを提供できる場合、それはかなり簡単です。S3オリジンでは、可能であればそれほど単純ではありません。
したがって、更新されたリソースを無効にすることをお勧めします。
s3側でメタデータを設定する必要があるようです。
http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html
これを行うための最良の方法は、BucketExplorerを使用して、「バッチ操作」、「メタデータの更新」、「メタデータの追加」を実行してから、「Cache-Control:max-age = 604800、public」を1週間のキャッシュ期間に追加することです。