Хостинг сайтов с помощью CloudFront

Мне всегда нравился Amazon. С его сервисами я уже работаю порядка двух лет. Еще когда использовал в качестве движка WordPress, перенес всю статику (изображения, стили) на сервера CloudFront, после чего скорость работы сайта выросла и довольно значительно.

Преимущество CloudFront перед своим сервером заключается в том, что его сервера расположены по всему миру (Америка, Европа и Азия), и для любого пользователя интернета материалы сайта оказываются всегда географически очень близко.

Когда же я перешел на использование Jekyll, то попытался разместить свой сайт полностью в CloudFront, но столкнулся с проблемами. Во-первых, сам сайт размещался на сервисе Amazon S3, куда его быстро загружать не получалось. Во-вторых, не было возможности простого управления кешированием файлов. И очень часто возникала ситуация, когда после публикации статьи, она появлялась на сайте только спустя какое-то время. Естественно, это было крайне не удобно. Именно поэтому я рассматривал другие варианты, такие как размещение сайта на GitHub, OpenShift, Amazon S3 и так далее.

Но недавно, просматривая в очередной раз документацию по CloudFront, обратил внимание на то, что теперь в качестве original server теперь можно использовать не только веб-сервисы Amazon, но и свой собственный сайт.

Использование CloudFront со своим сервером

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

Предварительно нужно в панели регистратора доменного имени создать еще одну отдельную запись, копию текущей. Именно ее мы будем использовать для связи нашего сервера с сервером CloudFront. К примеру, было доменное имя – denis.evsyukov.org, создаем копию этой записи с именем origin.denis.evsyukov.org. Если сайт размещен на сервере OpenShift, то этого делать не нужно, так как там мы уже имеем свое определенное имя, отличное от нашего оригинального.

Так же хотелось бы отметить тот факт, что на сервере OpenShift, если вы конечно его используете, совершенно не нужно создавать алиас для доменного имени. Так как для связи нашего сервера и сервера CloudFront будет использоваться то доменное имя, которое выделяется OpenShift.

В консоли управления сервисами Amazon выбираем пункт CloudFront. И затем в верхней панели щелкаем на кнопку “Create Distribution”.

На первом шаге в качестве метода доставки выбираем Download:

step1

На втором шаге предлагается указать Origin Domain Name, здесь указываются или домен сервера Amazon S3, на котором располагаются данные или же доменное имя нашего сайта:

step2

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

step3

Далее предлагается указать основные параметры кеширования. По умолчанию берутся значения с оригинального сервера. Это самый оптимальный вариант, который позволяет нам в дальнейшем избавиться от массы проблем. И на этом же шаге указывается, будут ли отрабатываться Forward Query String, то есть параметры, передаваемые в адресной строке. По умолчанию данная возможность отключена, но в некоторых случаях для корректной работы сайта требуется этот параметр активировать.

step4

На следующем шаге необходимо указать CNAME, то есть то доменное имя, которое будет использоваться для нашего сайта и объект по умолчанию, здесь в большинстве случаев вписываем index.html.

step5

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

step6

В списке Distributions появится новый пункт, в котором Status будет установлен в In Progress. Требуется порядка 15 минут на то, чтобы статус изменился на Deployed. Как только это произошло, можно проверять работу своего сайта, обращаясь по тому доменному имени, что указывается в созданном Distributions, что-то вида d3sdf2q0sdfbyq80.cloudfront.net. Если все нормально и все работает, можно изменять доменную зону у регистратора, прописывая для доменного имени запись вида CNAME.

Возможные сложности

Первый раз, когда я опубликовал таким образом свой сайт (использовал его копию), не заметил особых сложностей, но как только попытался перевести непосредственно сам сайт на использование CloudFront столкнулся с тем, что главная страница открывалась нормально, но при переходе по ссылкам со страницы Статьи я оказывался на домене от OpenShift. Хорошо, что управление dns-зоной у меня теперь на сервере CloudFlare. И обновление зоны проходит очень быстро, в отличие от того времени, когда использовалась панель управления зоной от регистратора.

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

Доменные имена

При использовании своего сервера достаточно просто настроить переадресацию с доменного имени без www на доменное имя с www. Но на некоторых сервисах это сделать не возможно, как например на GitHub. Что же делать?

На помощь приходит wwwizer.com. При этом не нужно регистрироваться на сервисе. Достаточно только в панели регистратора доменного имени создать запись. К примеру, для указанного выше случая необходимо создать запись типа A для домена без www, со значением 174.129.25.170. На этом все! Переадресация уже работает.

И соответственно наоборот, если нужно переадресовать домен с www на домен без www, то создаем запись для домена с www на указанный адрес.

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