Назад | Перейти на главную страницу

Доставка по всему сайту в CloudFront

После долгих поисков я не могу найти вопрос, возможно ли кэшировать весь мой веб-сайт в Cloudfront. (Статические ресурсы, а также HTML, возвращаемый по динамическому запросу).

Установка

Мой исходный сервер НЕ является экземпляром EC2, но находится на отдельном хостинге.

Я установил дистрибутив Cloudfront для кеширования всего с моего исходного сервера example.com. Я могу получить к нему доступ через сгенерированный URL-адрес из Cloudfront abcxyz.cloudfront.net.

Установить Cloudfront «перед» моим исходным сервером?

Мне нужна помощь в понимании того, могу ли я указать свой домен на Cloudfront, чтобы example.com сначала попадает в кеш Cloudfront (аналогично тому, как вы устанавливаете Varnish "перед" исходным сервером).

В такой настройке, что мне установить исходный сервер в Cloudfront? Установив его как example.com приведет к циклической ссылке, где cloudfront пытается проверить себя на наличие ресурса.

Если мой исходный сервер больше не настроен для ответа на example.com запросы в этой настройке? (Это позволяет мне настроить исходный сервер в Cloudfront на что-то вроде «content.example.com» и отвечать оттуда на динамические и статические запросы?)

Или Cloudfront не идеален для кеширования всего сайта? Не следует ли мне пытаться обслуживать динамический ответ (вывод HTML) из кеша и обслуживать только статические ресурсы (js, img, css и т. Д.)?

После некоторого дополнительного исследования кажется, что Cloudfront МОЖЕТ кэшировать весь ваш веб-сайт, но независимо от того, хотите вы этого или нет, заслуживает исследования. Надеюсь, это будет полезно для будущих прохожих.

Доставка по всему сайту

Вот некоторая информация о Доставка по всему сайту Предупреждение: Этот слайдшер является высокоуровневым - он не вникает в детали реализации.

Чтобы выполнить доставку по всему сайту, вам необходимо выполнить следующие общие действия.

Предположим, вы хотите служить example.com и www.example.com через Cloudfront (вы хотите, чтобы Cloudfront действовал как кеш для всего сайта, аналогично тому, как вы могли бы использовать Varnish).

Настроить раздачу

Настройте распространение в Cloudfront для своего домена.

  • Я обычно позволяю своему исходному серверу определять настройки кеша через выходные заголовки.
  • Установите свое происхождение примерно как content.example.com

Укажите свой домен

1) Укажите свои домены верхнего уровня (example.com и вероятно www.example.com) на ваш URL-адрес Cloudfront - это будет что-то вроде abc123.cloudfront.net а не IP-адрес

Заметка что это CNAME (abc123.cloudfront.net), а не запись A (IP-адрес). Я полагаю, может ли ваш DNS установить CNAME поверх A для корневого домена, у разных провайдеров.

Фактически, я думаю, что установка CNAME для уровня корневого домена противоречит RFC. Это может ограничить вас настройкой «www» версии вашего домена на Cloudfront, с использованием Route 53 или DNS Made Simple как эта статья предлагает.

2) Установите записи DNS так, чтобы что-то вроде content.example.com указывает на ваш исходный сервер. Это позволит облачному фронту достичь вашего исходного сервера, но общественность по-прежнему будет использовать example.com и www.example.com для просмотра содержания сайта

Предостережения

Есть несколько предостережений:

  1. Файлы cookie - важно, удаляет ли кеш файлы cookie. Запрос с файлами cookie обычно не кешируется (точнее, каждый уникальный файл cookie создает отдельную кэшированную копию). Подумайте о том, чтобы Cloudfront игнорировал установленные сервером файлы cookie, чтобы он мог кэшировать контент. Это не повлияет на файлы cookie, добавленные на стороне клиента из таких служб, как Google Analytics или комментарии Disqus. Это повлияет на логику сервера, если вы будете полагаться на разделение файлов cookie / идентификаторов сеансов от гостей и аутентифицированных пользователей.

  2. Cloudfront поддерживает GET и HEAD Запросы. POST и другие запросы HTTP-глаголов приведут к появлению страниц с ошибками. Это имеет значение, если вы разрешаете пользователям отправлять формы, а также ajax-запросы.

На моем сайте нет общедоступных пользователей. У меня есть админка, которой пользуюсь только я. Поэтому я могу войти в админку моего сайта через content.example.com напрямую, а не через общественность example.com и www.example.com. Это полностью обходит кеш, устраняя необходимость в передаче файлов cookie и позволяя использовать любые HTTP-команды.

Это работает для меня, но я подозреваю, что для большинства людей это не лучшая ситуация. YMMV с Cloudfront и кешированием всего сайта. Он по-прежнему отлично подходит для кеширования статических ресурсов.