Ответ 1
CloudFront пытается получить незашифрованный контент с исходного сервера в режиме реального времени. "Задержка репликации" или аналогичная проблема отсутствует, потому что CloudFront является сквозным CDN. Каждое расположение края CloudFront знает только о вашем существовании и конфигурации вашего сайта; он не знает о вашем контенте, пока не получит от него запросы. Когда это происходит, край CloudFront извлекает запрошенный контент с исходного сервера и кэширует его соответствующим образом для обслуживания последующих запросов.
Проблема, возникающая здесь, связана с понятием, иногда называемым "отрицательным кешированием" - кэшированием того факта, что запрос не будет работать, что обычно делается для того, чтобы избежать забивания происхождения того, что кэшируется с запросами, которые вероятно, все равно потерпит неудачу.
По умолчанию, когда ваше начало возвращает код состояния HTTP 4xx или 5xx, CloudFront кэширует эти ответы об ошибках в течение пяти минут, а затем отправляет следующий запрос для объекта в исходное состояние, чтобы узнать, была ли устранена проблема, вызвавшая ошибку и запрошенный объект теперь доступен.
— http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html
Если браузер или что-то еще пытается загрузить файл с этого края CloudFront до того, как загрузка в S3 будет завершена, S3 вернет ошибку, а CloudFront - в этом краевом местоположении - будет кэшировать эту ошибку и помните, что в течение следующих 5 минут не пытайтесь снова попробовать.
Не волнуйтесь, однако - этот таймер настраивается, поэтому, если браузер делает это под капотом и вне вашего контроля, вы все равно сможете его исправить.
Вы можете указать продолжительность кэширования ошибок - Ошибка кэширования ошибок TTL - для каждого кода состояния 4xx и 5xx, который кэширует CloudFront. Для процедуры см. Настройка поведения ответа на ошибку.
— http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html
Чтобы настроить это в консоли:
-
При просмотре конфигурации распространения перейдите на вкладку
Error Pages
. -
Для каждой ошибки, в которой вы хотите настроить синхронизацию, начните с нажатия
Create Custom Error Response
. -
Выберите код ошибки, который вы хотите изменить, из раскрывающегося списка, например
403
(Запрещено) или404
(не найдено). Конфигурация вашего bucket определяет, какой код S3 возвращает для отсутствующих объектов, поэтому, если вы не уверены, измените 403, повторите процесс и измените значение 404. -
Установите
Error Caching Minimum TTL (seconds)
в0
-
Оставьте
Customize Error Response
установленным наNo
(если установлено значениеYes
, этот параметр позволяет настраивать пользовательский контент ответа на ошибки, чего вы не хотите. Активация этой опции выходит за рамки этого вопроса. ) -
Нажмите
Create
. Это вернет вас к предыдущему виду, где вы увидитеError Caching Minimum TTL
для кода, который вы только что определили.
Повторите эти шаги для каждого кода ответа HTTP, который вы хотите изменить, от поведения по умолчанию (это время задержки на 300 секунд, описанное выше).
Когда вы внесете все необходимые изменения, вернитесь на главный экран консоли CloudFront, где перечислены дистрибутивы. Подождите, пока состояние распределения изменится с In Progress
на Deployed
(обычно около 20 минут, чтобы изменения были вытолкнуты ко всем краям) и тест.