Как настроить HTTPS для статичного сайта S3
Опубликовано 16 December 2016 в Разное
Google с августа 2016 использует HTTPS как один из сигналов ранжирования. Amazon раздает своим пользователям бесплатные сертификаты. Эти два фактора заставили меня искать способ включения HTTPS для моего блога на S3. Решение довольно простое: спрятать S3 за CloudFront.
Прежде чем начать
CloudFront - это кэширующий прокси сервер. При работе с ним нужно запастись терпением. Каждая ошибка в настройках - это ожидание 20-25 минут, пока исправления раскатятся по серверам.
Мой опыт основан на прикручивании HTTPS к моему блогу на английском. Мой опыт релевантен для любого статичного сайта, который хостится на S3, вне зависимости от того как он сделан: с помощью Jekyll или Pelican, или другим генератором, или вообще руками.
Шаг #1. Запрашиваем сертификат в ACM
Перейдите в консоль ACM и запросите сертификат. Надеюсь, что у вас есть доступ к почтовым ящикам владельца и контактов домена. Amazon отправит на эти адреса письмо со ссылкой на верификацию.
Важно! Если используете домен без www (domain.com) как я, запрашивайте сертификат для domain.com без "www." или "*." перед ним.
Шаг #2. Создаем CloudFront distribution
Идем в консоль CloudFront и выбираем "Create new Distribution".
Первым делом указываем метод доставки контента. Нужно выбрать Web.
На втором экране выбираем бакет S3 с контентом сайта в поле Origin Domain Name. Возможно следует выставить "Restrict Bucket Access" в Yes. Но я не проверял.
Мотаем дальше до "Default Cache Behavior Settings". Меняем "Viewer Protocol Policy" на "Redirect HTTP to HTTPS".
В блоке "Distribution Settings" вводим имя домена в Alternate Domain Names и выбираем Custom SSL Certificate (если ни одного сертификата нет, то возвращаемся к шагу #1).
И последнее, необходимо ввести "index.html" в поле Default Root Object.
Теперь можно включить distribution. Можно сходить попить кофе. Запуск займет 20-25 минут.
Шаг #3. Меняем зоны в Route 53.
После диплоя distribution можно менять настройки Route 53. Нужно выставить правильную запись типа A, которая будет указывать на соответствующий URL CloudFront.
Все. Теперь блог работает через HTTPS.
TODO
Осталась пара штук, которые надо бы решить:
- Я не знаю как настроить редирект с www.domain.com на domain.com.
- CloudFront - это кэширующий прокси. Вам придется заботиться о инвалидации кэша после обновления контента. Пока я не нашел хорошего варианта для использования вместе с Pelican.
Возник вопрос? Мне всегда можно написать в Twitter: avkorablev