Мы только что перешли на Amazon AWS. В настоящее время у нас есть экземпляр EC2, который работает хорошо. Он запускает Nginx впереди, а Apache - сзади. Это тоже хорошо работает. Все сайты запускаются правильно и включают заголовок Cache-Control для файлов, которые обслуживаются из EC2.
Проблема заключается во ВСЕХ статических файлах, которые мы поместили в Amazon S3 , доступ к которым осуществляется через CloudFront CDN . Мы можем получить доступ к файлам нормально (и без проблем с CORS), но, очевидно, CloudFront не обслуживает файлы с заголовком Cache-Control. Мы хотим использовать кэширование в браузере.
На мой взгляд, экземпляр EC2 здесь не играет роли, поскольку статические файлы обслуживаются непосредственно S3 + CloudFront, запрос не отправляется на веб-сервер в EC2.
Я в полной растерянности.
Вопрос: 1) Как мне установить Cache-Control в этом случае? 2) Можно ли установить Cache-Control? От S3 или CloudFront?
Примечание. Я просмотрел несколько страниц в Google, где вы можете установить заголовок в S3 для отдельных объектов. Это действительно не продуктивный способ сделать это специально, поскольку в моем случае речь идет о нескольких объектах.
Благодарность!
Ответы:
Ну, «продуктивно» или нет, именно так оно и рассчитано на работу.
CloudFront не добавляет
Cache-Control:
заголовки.CloudFront проходит сквозной (а также отношения, если иной не сконфигурировано) в
Cache-Control:
заголовках , предоставляемого сервер происхождения, который в данном случае является S3.Чтобы получить
Cache-Control:
заголовки, предоставляемые S3 при извлечении объекта, они должны быть предоставлены при загрузке объекта в S3 или добавлены к метаданным объекта с помощью последующей операции put + copy, которая может использоваться для внутреннего копирования объекта в себя в S3, изменение метаданных в процессе. Это то, что делает консоль, за кулисами, если вы редактируете метаданные объекта.В S3 также нет (на случай, если вам интересно) глобальных настроек, заставляющих все объекты в корзине возвращать эти заголовки - это атрибут для каждого объекта.
Обновление: Lambda @ Edge - это новая функция в CloudFront, которая позволяет запускать триггеры для запросов и / или ответов, между средством просмотра и кешем и / или кешем и источником, запуская код, написанный в Node.js, для простой структуры объекта запроса / ответа. выставлено CloudFront.
Одним из основных приложений для этой функции является манипулирование заголовками ... так что, хотя вышеприведенное все еще является точным - само CloudFront не добавляет
Cache-Control
- теперь у функции Lambda есть возможность добавлять их к ответу, который возвращается из CloudFront.Этот пример добавляет,
Cache-Control: public, max-age=86400
только еслиCache-Control
в ответе уже нет заголовка.Использование этого кода в триггере ответа источника вызовет его запуск каждый раз, когда CloudFront извлекает объект из источника, и изменяет ответ до его кэширования CloudFront.
Обновление (2018-06-20): Недавно я отправил запрос на добавление в команду CloudFront, чтобы разрешить настройку статических заголовков ответа источника в качестве атрибутов источника, аналогично тому, как можно добавлять статические заголовки запроса , теперь ... но с скручивание, позволяющее настраивать каждый заголовок для добавления условно (только если источник не предоставил этот заголовок в ответе) или безоговорочно (добавление заголовка и перезапись заголовка из источника, если таковой имеется).
С запросами функций вы обычно не получаете никакого подтверждения того, рассматривают ли они на самом деле реализацию новой функции ... или даже могут ли они уже работать над ней ... это просто объявляется, когда они будут готовы. Итак, я понятия не имею, будут ли они реализованы. Необходимо привести аргумент, что, поскольку эта возможность уже доступна через Lambda @ Edge, в базовой функциональности она не требуется ... но мой контраргумент состоит в том, что базовая функциональность не является полной функциональности без возможности выполните простую статическую манипуляцию заголовком ответа, и если это единственная причина, по которой необходим триггер, то требование лямбда-триггеров - это ненужные затраты в финансовом отношении и с дополнительной задержкой (даже при том, что ни один из них не обязательно является непомерной стоимостью).
источник