Руководство по обслуживанию вашего сайта Carrd на нескольких доменах

AWS Certificate Manager (ACM) позволяет создавать сертификаты SSL/TLS и управлять ими. Эти сертификаты помогают аутентифицировать веб-сайты и разрешают зашифрованные соединения. Они есть на всех веб-сайтах — или должны быть — поскольку современные браузеры, как правило, не позволяют вам получить доступ к сайтам, где сертификаты недействительны.

AWS CloudFront — глобальная сеть доставки контента (CDN). CloudFront можно использовать для повышения производительности веб-сайтов за счет кэширования контента по всему миру. Раздачи CloudFront также можно использовать для предоставления одного или нескольких исходных ресурсов по одному URL-адресу, который сам может иметь псевдонимы (CNAMES ).

В этом руководстве я расскажу об использовании этих двух сервисов для обслуживания одного размещенного сайта в нескольких доменах.

Фон

Недавно я перенес свой личный сайт на Carrd. Хотя мне нравится создавать и размещать собственные сайты, правда в том, что я не дизайнер. Для чего-то вроде целевой страницы я начинаю думать, что проще использовать редактор, который легко сделает мой сайт современным.

План Carrd Pro позволяет использовать пользовательские домены на ваших сайтах. Однако вы можете указать только один домен. Что касается моего личного сайта, то у меня их три: amandaquint.com, amandaquint.dev и amandaquint.me.
Нужны ли мне все 3 этих домена? Вероятно, нет, но я полагаю, что, пока они у меня есть, я мог бы также указать на мой сайт, а не сидеть там без дела.

Поэтому, чтобы направить все три этих домена на мой сайт Carrd, я решил использовать AWS Certificate Manager и AWS CloudFront.

Использование хостинговых зон Route 53 (и почему я этого не сделал)

Хочу отметить, что в данном случае я мог бы использовать Hosted Zones для упрощения некоторых шагов в этом процессе. Однако хостинговые зоны Route 53 стоят 0,50 доллара США в месяц, и, поскольку мне потребовались бы две дополнительные зоны, а в противном случае этот метод подпадал бы под действие уровня бесплатного пользования AWS, я решил сэкономить 1 доллар США в месяц.

Ранее я писал об Управлении вашими доменами Google в Amazon Route 53, и есть веские причины для переноса ваших доменов, я просто не думал, что это необходимо для масштаба того, что я делаю.

Если вы решите использовать Route53, у вас будут варианты, которые я здесь не рассматриваю.

Диспетчер сертификатов AWS

Когда я указал свой домен .com в Carrd и обновил записи DNS с предоставленными записями A, Carrd выпустил сертификат для моего сайта. Однако мне нужно было, чтобы домены .dev и .me также были сертифицированы для правильной работы.

Создать сертификат

Важно: вам нужно создать свой сертификат в us-east-1 (Северная Вирджиния). Это единственный регион, из которого CloudFront может считывать сертификаты.

В консоли AWS перейдите к Диспетчеру сертификатов и нажмите кнопку, чтобы запросить новый сертификат — выберите общедоступный. Оттуда вам будет предложено ввести доменное имя (имена) для вашего сертификата. В моем случае их было 6, по одному на каждый домен .com .dev .me и аналог каждого домена www.
Обратите внимание, что подстановочные знаки разрешены (я мог бы сделать *.amandquint.me ), но я решил быть явным, потому что не предполагаю, что буду использовать здесь какие-либо другие поддомены.

Я также решил проверить свой сертификат с помощью DNS, так как у меня есть доступ к конфигурации DNS для всех этих доменов.

После того, как сертификат выдан, его необходимо проверить с помощью некоторых CNAME записей. Если ваши домены находятся в Route 53 — как мой домен .com — есть удобная кнопка «Создать записи в Route 53». В противном случае их нужно вручную скопировать в конфигурацию DNS для ваших доменов — в случае с моими доменами .dev и .me это означало Google Domains.

После того, как я создал новые записи, потребовалось всего минуту или две, чтобы все мои домены показывали статус «Успешно».

Цены на AWS ACM

В то время как частные сертификаты, выданные в ACM, платные, общедоступные сертификаты, которые вы создаете, бесплатны. AWS обычно взимает плату за ресурсы, которые используют эти сертификаты.

AWS CloudFront

Затем перейдите к CloudFront в консоли AWS и нажмите кнопку «Создать дистрибутив».

При создании раздачи CloudFront существует множество настроек, и по большей части я оставляю их со значениями по умолчанию. Вот что я установил, но обязательно настройте параметры так, как это имеет смысл для вашего сайта:

Название происхождения

Я установил свое исходное имя на amandaquint.com — обратите внимание, что в этом поле предлагается много предложений по ресурсам AWS, и этого имени в нем не было. Мне пришлось вводить его явно, так что убедитесь и перепроверьте, что находится в раскрывающемся списке.

Также важно отметить, что записи DNS для amandquint.com указывают на мой сайт Carrd.

Политика протокола просмотра

Я выбрал вариант Redirect HTTP to HTTPS .

Ключ кеша и запросы источника

Я выбрал встроенную политику CachingOptimized для политики кэширования, но не устанавливал политику ни для одного из других параметров.

Альтернативное доменное имя (CNAME)

Здесь я указал другие мои доменные имена:

Пользовательский SSL-сертификат

Здесь вы связываете сертификат, созданный в ACM. Он должен быть доступен в выпадающем меню. Если это не так — перепроверьте, чтобы убедиться, что ваш сертификат был создан в правильном регионе. Сертификат должен быть в us-east-1!

Создать дистрибутив

После того, как вы выбрали свои настройки, нажмите кнопку «Создать дистрибутив». Обратите внимание, что для создания раздачи CloudFront может потребоваться несколько минут.

Создайте новые записи CNAME в настройках DNS.

Как только статус вашей раздачи CloudFront станет зеленым, вы сможете создать новые записи CNAME для доменов. В этом случае я зашел в настройки DNS в Google Domains для своих доменов .dev и .me и ввел новую запись, указывающую на доменное имя дистрибутива.

Цены CloudFront

Для больших объемов данных CloudFront имеет сложную таблицу цен в зависимости от региона. Однако в рамках уровня бесплатного пользования AWS они позволяют использовать до 1 ТБ данных и 10 миллионов HTTPS-запросов в месяц. Я не ожидаю, что мой личный сайт получит почти такой трафик, поэтому можно с уверенностью предположить, что CloudFront будет бесплатным.

Поиск неисправностей

Я считаю, что большинство вещей, связанных с DNS, привередливы в настройке, и я почти всегда что-то опечатываю или устанавливаю неправильно в первый раз — я делаю это недостаточно часто. Вот несколько советов по устранению неполадок, которые я вынес из этого опыта:

Не будь поспешным

Любые изменения, связанные с DNS, могут быть медленными, и в зависимости от того, как и когда данные были кэшированы, для их появления может потребоваться несколько минут (или даже несколько часов). Не спешите предполагать, что что-то не так, когда изменения не происходят мгновенно.

Использовать копать

dig — это инструмент командной строки, который может помочь устранить проблемы с сетью и DNS. Если что-то работает не так, попробуйте запустить эту команду, чтобы убедиться, что записи связаны так, как вы ожидаете.

Остерегайтесь «https://»

Когда я создавал CNAME записей в Google Domains, я скопировал доменное имя CloudFront Distribution, используя маленькую кнопку копирования рядом с ним. В Google Domains я просто вставил значение — и ничего не сработало.

Мне потребовалось некоторое время, чтобы понять, что https:// добавляется к имени дистрибутива, когда вы используете эту кнопку копирования — и это нормально, если вы собираетесь открыть этот URL-адрес в своем браузере — но это не должно быть частью вашего Значение записи DNS.

Последнее замечание: используйте инфраструктуру как код

Хотя я делал это через консоль, я настоятельно рекомендую писать этот процесс как CloudFormation или AWS CDK. Если вы похожи на меня, это процесс, который вы будете делать нечасто — и в следующий раз, когда вам понадобится настроить эти ресурсы, вы забудете, что вы сделали. Написание небольшого скрипта и сохранение его в репозитории git — отличный способ напомнить вам, как все устроено!