Статический контент в CloudFront неправильно кэшируется со временем - PullRequest
0 голосов
/ 04 февраля 2019

Я установил CloudFront поверх нескольких блоков S3 (в разных регионах), чтобы обеспечить быструю стабильную версию моего веб-приложения.Это веб-приложение реализовано с использованием React, что означает, что все это один файл HTML и один файл Javascript.

Используя механизм маршрутизации React, все пути в URL обрабатываются в коде.Это означает, что если я нажму на ссылку типа www.example.com/users, запрос не будет отправлен на сервер.Вместо этого клиентский код отобразит соответствующую страницу без каких-либо консультаций с сервером (я просто говорю о HTML, а не о данных).Это означает, что если некоторые пользователи вводят указанный URL-адрес, сервер должен вернуть index.html (единственный HTML-файл, который у меня есть), который затем позаботится об URL-адресе на стороне клиента.Другими словами, все запросы, отправляемые на сервер, должны возвращать либо HTML-файл, либо файл Javascript, который я упоминал ранее.Даже запросы, которые указывают на несуществующие файлы.

Чтобы выполнить это требование, я задал этот вопрос , и я получил ответ, подобный этому:

Мне нужно настроить страницу ошибок для моего дистрибутива в CloudFront и перенаправить все 403 (запрещенные) запросы в файл /index.html.Это связано с тем, что когда запрос указывает на несуществующий файл на S3, S3 вернет 403 в CloudFront из-за отсутствия разрешения на листинг.Или я могу предоставить разрешение на листинг и вместо этого обработать ошибку 404 (я не проверял этот последний вариант).

В любом случае, я настроил это, и он отлично работает - в течение нескольких часов.Но затем по неизвестной причине запрос к файлу Javascript также возвращает файл HTML.И, конечно же, все, что я получаю, на самом деле происходит из кеша CloudFront, что означает, что независимо от того, сколько раз я отправляю запрос, он будет возвращать одно и то же значение.До тех пор, пока я не аннулирую кэш на CloudFront, который решит проблему еще на несколько часов.И мы обходим все вокруг.

Хотя я не уверен, почему это происходит, но я предполагаю, что в какой-то момент бак S3 недоступен для CloudFront, что приведет к кешированию CloudFront index.html.Что я могу с этим поделать?

1 Ответ

0 голосов
/ 04 февраля 2019

Я думаю, что нашел проблему:

УБЕДИТЕСЬ, ЧТО ВАШ СТАТИЧЕСКИЙ КОНТЕНТ НА ​​ВСЕХ ВЕДРОМ S3 ИДЕНТИКАЛЬНЫ !!!

В моем случае имя файла Javascriptавтоматически генерируется Webpack, что означает, что он случайный.И поскольку разные регионы были «скомпилированы» отдельно, их имена файлов отличались.

...