Фон
Я размещаю статический сайт на S3, с CloudFront сверху. У меня проблема с моими файлами HTML.
Согласно FAQ CloudFront :
Amazon CloudFront использует эти заголовки элементов управления кэшем, чтобы определить, как часто необходимо проверять источник обновленной версии этого файла.
Что я сделал до сих пор
Имея это в виду, я установил HTML-файлы в моем S3 Bucket, чтобы добавить следующие заголовки:
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Expires: Fri, 01 Jan 1990 00:00:00 GMT
При моем первом обращении к my samplefile.htm
я вижу следующие заголовки ответа (я исключил очевидные заголовки (например Content-Type
), чтобы не потерять смысл:
Cache-Control:no-cache, no-store, max-age=0, must-revalidate
Date:Sat, 10 Dec 2011 14:16:51 GMT
ETag:"a5890ace30a3e84d9118196c161aeec2"
Expires:Fri, 01 Jan 1990 00:00:00 GMT
Last-Modified:Sat, 10 Dec 2011 14:16:43 GMT
Server:AmazonS3
X-Cache:Miss from cloudfront
Как видите, мой Cache-Control
заголовок там. Проблема в том, что если я обновляю этот файл и обновляю его, я получаю кэшированное содержимое (а не последний файл) и вижу, что CloudFront обслуживает свою кэшированную версию, просматривая заголовки ответа:
X-Cache:Hit from cloudfront
Резюме / вопрос
Имея в виду вышеизложенное, как я могу добиться автоматического получения последней версии HTML при использовании CloudFront?
Согласно FAQ, я должен быть в состоянии сделать это с заголовками Cache-Control, но я не могу заставить это работать.
Следуя ответам ниже
В конце концов я решил изменить свой www CNAME, чтобы он указывал на мое ведро S3 напрямую. Затем добавлен новый CNAME под названием «static», который указывает на CloudFront.
Это означает, что HTML является прямым из S3, который затем имеет все свои ссылки CSS / JS / IMG, указывающие на static.mydomain.com