Как преодолеть ограничения корневого домена CNAME?

нас таких много веб-приложений для наших клиентов. Как очевидно, они хотят использовать свои собственные домены для ссылки на эти приложения, обычно они хотят, чтобы любой пользователь, который либо тип http://www.customer1.example или http://customer1.example переходит к их веб-приложению.

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

по сути:

customer1.example IN CNAME customer1.mycompanydomain.example //this is invalid as the RFC
www.customer1.example IN CNAME customer1.mycompanydomain.example //this is valid and will work

мы хотим иметь возможность изменять IP-адрес customer1.mycompanydomain.example или A запись и наши клиенты будут следовать этой записи, которую мы можем контролировать.

в нашем DNS это будет выглядеть так:

customer1.mycompanydomain.example IN A 192.0.2.1

какие идеи?

8 ответов


причина, по которой этот вопрос все еще часто возникает, заключается в том, что, как вы упомянули, где-то как-то кто-то предположил, что важно написал, что RFC состояния доменных имен без поддомена перед ними недействительны. Однако, если вы внимательно прочтете RFC, вы обнаружите, что это не совсем то, что он говорит. На самом деле,RFC 1912 гласит:

Не перегибайте палку с CNAMEs. Используйте их при переименовании хостов, но план, чтобы избавиться от них (и сообщите своим пользователям).

некоторые DNS-узлы предоставляют способ получить функциональность CNAME-like в вершине зоны (уровень корневого домена, для голого доменного имени), используя пользовательский тип записи. Такие записи включают, например:

  • псевдоним в DNSimple
  • ANAME в DNS легко
  • ANAME в easyDNS
  • CNAME в CloudFlare

для каждого поставщика настройка аналогична: укажите псевдоним или запись ANAME для вашего домена apex example.domain.com так же, как и с записью CNAME. В зависимости от поставщика DNS пустое значение или значение @ Name определяет вершину зоны.

псевдоним или ANAME или @ example.domain.com.

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

Я категорически не согласен с утверждением, что это делается только "любитель админы" или подобные идеи. Это просто "что нужно сделать для имени и его службы?"сделка, а затем адаптировать конфигурацию DNS для обслуживания этих пожеланий; если ваши основные услуги-это веб и электронная почта, я не вижу никакой веской причины, почему удаление CNAMEs для-good будет проблематичным. В конце концов, кто бы предпочел ... subdomain.domain.org over @domain.org ? Кому нужен "www", если вы уже установили протокол себя? Нелогично предполагать, что использование корневого имени домена будет недопустимым.


CNAME'ING корневая запись технически не против RFC, но имеет ограничения, означающие, что это практика, которая не рекомендуется.

нормально корневую запись будет иметь несколько записей. Скажем, 3 для серверов имен, а затем один для IP-адреса.

в RFC:

Если CNAME RR присутствует на узле, никакие другие данные не должны быть присутствует;

и за IETF "общие ошибки работы и конфигурации DNS" Документ:

это часто пытаются неопытные администраторы в качестве очевидного способ разрешить Вашему доменному имени также быть хостом. Тем не менее, DNS серверы, такие как BIND, увидят CNAME и откажутся добавлять любые другие ресурсы для этого имени. Поскольку никакие другие записи не допускаются сосуществуя с CNAME, записи NS игнорируются. Поэтому все хозяев в захолустье.xx домен игнорируется как хорошо!

ссылки:


Я не знаю, как они уходят с этим, или какие отрицательные побочные эффекты их могут быть, но я использую Hover.com чтобы разместить некоторые из моих доменов и недавно настроить вершину моего домена как CNAME. Их инструмент редактирования DNS не жаловался вообще, и мой домен счастливо разрешается через назначенный CNAME.

вот что Dig показывает мне для этого домена (фактический домен запутан как mydomain.com):

; <<>> DiG 9.8.3-P1 <<>> mydomain.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2056
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;mydomain.com.          IN  A

;; ANSWER SECTION:
mydomain.com.       394 IN  CNAME   myapp.parseapp.com.
myapp.parseapp.com. 300 IN  CNAME   parseapp.com.
parseapp.com.       60  IN  A   54.243.93.102

вы должны поставить точку в конце внешнего домена, чтобы он не думал, что вы имеете в виду customer1.mycompanydomain.com.localdomain;

Так что просто измените:

customer1.com IN CNAME customer1.mycompanydomain.com

до

customer1.com IN CNAME customer1.mycompanydomain.com.

sipwiz правильно единственный способ сделать это правильно-гибридный подход HTTP и DNS. Мой регистратор является повторным продавцом для Tucows, и они предлагают переадресацию корневого домена в качестве бесплатной услуги с добавленной стоимостью.

Если ваш домен blah.com они спросят вас, куда вы хотите перенаправить домен, и вы введете www.blah.com - ... Они назначают запись A на свой сервер apache и автоматически добавляют blah.com как DNS vhost. Vhost отвечает перенаправлением ошибок HTTP 302 их к нужному URL. Он прост в сценарии / настройке и может быть обработан нижним концом, иначе будет списано оборудование.

выполните следующую команду для примера: curl-v eclecticengineers.com


моя компания делает то же самое для ряда клиентов, где мы размещаем веб-сайт для них, хотя в нашем случае это xyz.company.com вместо www.company.com - ... Мы заставим их установить рекорд. xyz.company.com чтобы указать на IP-адрес, мы их выделяем.

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

  • используйте балансировщик нагрузки NAT или IP и дайте вашим клиентам IP адрес, принадлежащий ему. Если IP-адрес веб-сервера необходимо изменить, вы можете сделать обновление на NAT или балансировщике нагрузки,

  • также предложите услугу хостинга DNS и попросите своих клиентов разместить свой домен с вами, чтобы вы могли обновить записи A,

  • попросите своих клиентов установить запись до одного основного веб-сервера и использовать перенаправление HTTP для веб-запросов каждого клиента.


спасибо и sipwiz и MrEvil. Мы разработали PHP скрипт, который будет анализировать URL, который вводит пользователь и вставлять www на самый верх. (например, если клиент входит kiragiannis.com, затем он перенаправит на www.kiragiannis.com). Таким образом, наш клиент указывает свой корень (например,customer1.com to A запись, где наш веб-переадресации), а потом www CNAME реальным A запись управляется нами.

под кодом в случае, если вы интересует будущее нас.

<?php
$url = strtolower($_SERVER["HTTP_HOST"]);

if(strpos($url, "//") !== false) { // remove http://
  $url = substr($url, strpos($url, "//") + 2);
}

$urlPagePath = "";
if(strpos($url, "/") !== false) { // store post-domain page path to append later
  $urlPagePath = substr($url, strpos($url, "/"));
  $url = substr($url, 0, strpos($url,"/"));
}


$urlLast = substr($url, strrpos($url, "."));
$url = substr($url, 0, strrpos($url, "."));


if(strpos($url, ".") !== false) { // get rid of subdomain(s)
  $url = substr($url, strrpos($url, ".") + 1);
}


$url = "http://www." . $url . $urlLast . $urlPagePath;

header( "Location:{$url}");
?>

Я вижу readytocloud.com размещен на Apache 2.2.

существует гораздо более простой и эффективный способ перенаправления сайта, отличного от www, на сайт www в Apache.

добавьте следующие правила перезаписи в конфигурации Apache (либо внутри виртуального хоста, либо снаружи. Это не имеет значения):

RewriteCond %{HTTP_HOST} ^readytocloud.com [NC]
RewriteRule ^/$ http://www.readytocloud.com/ [R=301,L]

или следующие правила перезаписи, если требуется сопоставление URL-адресов от сайта, отличного от www, к сайту www:

RewriteCond %{HTTP_HOST} ^readytocloud.com [NC]
RewriteRule (.*) http://www.readytocloud.com [R=301,L]

отметим, mod_rewrite, с модуль должен быть загружен, чтобы это работало. К счастью readytocloud.com выполняется в поле CentOS, которое по умолчанию загружает mod_rewrite.

у нас есть клиентский сервер под управлением Apache 2.2 с чуть менее 3,000 доменами и почти 4,000 перенаправлениями, однако нагрузка на сервер зависает вокруг 0.10 - 0.20.