Один из самых часто задаваемых вопросов в рассылках это "Как мне настроить хостинг моего сайта на GAE без www (или голом домене/naked domain)".

Постараюсь полностью ответить на этот вопрос для того чтобы было понимание почему это невозможно.

DNS

Для начала придется немного разобраться как работает система доменных имен в интернете.

Когда мы набираем адрес страницы в браузере у нас происходит несколько событий. На первом этапе адрес разбивается на составляющие из которого выделяется доменное имя. И с помощью системной утилиты "ресолвится" в IP адрес, к которому уже потом идет запрос.

DNS это по сути децентрализованная база данных расположенная на множестве серверов. Для сайта с именем seoautomator.mediavirus.ru происходит процедура взаимодействия с DNS серверами. Прежде чем обратиться к самому серверу. Адрес разбивается на составные части, для удобства запишем их в обратном порядке . ru mediavirus seoautomator,

  • . — точка, это нулевой уровень, DNS клиент обращается к корневому домену который состоит из . (точка), и запрашивает у него список DNS серверов которые отвечают за зону первого уровня.
  • ru — это домен первого уровня за него отвечает регистратор этого домена, когда клиент обращается к нему, то производится поиск в базе данных и выдается список NS серверов. Это те сервера которые мы указывали при регистрации.
  • NS сервера домена mediavirus уже наши и на запрос о том где seoautomator отвечают... пока для простоты скажем что отдает IP адрес.

Для полноты понимания мира можно прочитать статью о рекурсивном DNS запросе.

Датацентры

Что нам известно о Google с точки зрения их физического расположения? Несколько вещей:

  • У Google много датацентров
  • Они расположены в разных частях света
  • Часто нам отвечает тот который ближе или тот который работает
  • Вероятно Google сами бы хотели решать какой датацентр будет обслуживать какой сервис, в том числе и GAE

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

Домашнее задание: попробуйте попинговать google.com и www.google.com и сравните разницу времени ответа. Задание со звездочкой посмотреть марштут traceroute.

Добавление своего домена

Когда мы добавляем свой домен, то не можем добавить прямой IP адрес к конкретному серверу, как это происходит у многих других хостингов. Для случаев когда часть ветки DNS базы надо делегировать какому-то другому DNS серверу существует специальный тип записи CNAME. Поэтому мы добавляем следующую запись:

seoautomator.mediavirus.ru. CNAME ghs.google.com.

И вот тут начинается то ради чего был весь этот пост. Почему мы не можем добавить запись CNAME для голого домена?

А теперь то чего вы меньше всего ожидали — глупого ответа без объяснения причин. По стандарту (RFC 1912, пункт 2.4, или более простым языком) запись CNAME для указанного хоста должена (MUST) быть единственной.

Впрочем объяснение есть и очень простое, это просто правило безопасности, можно сравнить CNAME с символической ссылкой в файловой системе. Было бы странно если бы ссылка имела свое собственное представление о владельце файла или его размере, точно так же и тут. Перенаправляем клиента к другому серверу полностью.

Что делать с голыми доменами

Хотя одна из самых популярных заявок #777 посвящена как раз именно этой проблеме думаю не стоит ждать решения, а придумать его самостоятельно.

Наиболее быстрый, но далеко не самый чистый способ это использовать редиректы Tumblrпредложенные Urban Monkey.

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



blog comments powered by Disqus

Support

If you like my posts, please support me on Gittip

Published

15 March 2011

In tags we trust

Fork me on GitHub