Как настроить DNS для домена apex (без www), указывающего на приложение Heroku?
Я уже добавил пользовательский домен в свое приложение Heroku, и он работает с www.domain.com
.
Мне также нужно знать, как настроить домен без www
для разрешения приложения.
Вот мои текущие настройки DNS:
$TTL 86400
@ IN SOA ns1.first-ns.de. postmaster.robot.first-ns.de. (
2013041500 ; serial
14400 ; refresh
1800 ; retry
604800 ; expire
86400 ) ; minimum
@ IN NS robotns3.second-ns.com.
@ IN NS robotns2.second-ns.de.
@ IN NS ns1.first-ns.de.
@ IN A 88.198.38.XXX
localhost IN A 127.0.0.1
mail IN A 88.198.38.XXX
ftp IN CNAME www
imap IN CNAME www
loopback IN CNAME localhost
pop IN CNAME www
relay IN CNAME www
smtp IN CNAME www
www IN CNAME appname.herokuapp.com.
@ IN MX 10 mail
Какие настройки следует использовать, чтобы и example.com
и www.example.com
правильно указывали на мое приложение Heroku?
Ответы
Ответ 1
(Примечание: корневые, базовые, вершинные домены - одно и то же. Использование взаимозаменяемо для google-foo.)
Традиционно, чтобы указать ваш домен apex, вы должны использовать запись A, указывающую на ваш IP-адрес сервера. Это решение не масштабируется и не является жизнеспособным для облачной платформы, такой как Heroku, где многочисленные и часто меняющиеся серверы отвечают за ответы на запросы.
Для поддоменов (например, www.example.com
) вы можете использовать записи CNAME, указывающие на your-app-name.herokuapp.com
. Оттуда Heroku управляет динамическими записями A за your-app-name.herokuapp.com
, чтобы они всегда были актуальными. К сожалению, спецификация DNS не позволяет записи CNAME на вершине зоны (базовый домен). (Например, записи MX будут ломаться, так как CNAME будет следовать в первую очередь.)
Возвращаясь к корневым доменам, простое и общее решение состоит в том, чтобы не использовать их вообще. В качестве резервной меры некоторые поставщики DNS предлагают настроить перенаправление HTTP для вас. В этом случае настройте его так, чтобы example.com
был перенаправлен HTTP на www.example.com
.
Некоторые поставщики DNS вышли с помощью пользовательских решений, которые позволяют поведение CNAME на вершине зоны. Насколько мне известно, DNSimple ALIAS record и DNS Made Easy ANAME record; оба ведут себя аналогичным образом.
Используя их, вы можете настроить свои записи как (используя нотацию зонального файла, даже если вы, вероятно, сделаете это в своем веб-интерфейсе):
@ IN ALIAS your-app-name.herokuapp.com.
www IN CNAME your-app-name.herokuapp.com.
Запомните @
вот краткое описание корневого домена (example.com
). Также обратите внимание на то, что конечные точки важны как для файлов зон, так и для некоторых пользовательских веб-интерфейсов.
См. также:
Примечания:
-
Amazon Route 53 также имеет тип записи ALIAS, но он несколько ограничен, поскольку он работает только в точке AWS. На данный момент я бы не рекомендовал использовать это для установки Heroku.
-
Некоторые люди путают DNS-провайдеров с регистраторами доменных имен, так как есть немного совпадения с компаниями, предлагающими оба. Имейте в виду, что для переключения вашего DNS на одного из вышеупомянутых поставщиков вам нужно только обновить свои записи сервера имен у вашего текущего регистратора домена. Вам не нужно передавать свою регистрацию домена.
Ответ 2
Теперь я использую Google Apps (для электронной почты) и Heroku как веб-сервер. Я использую функцию Постоянного перенаправления Google Apps 301 для перенаправления голого домена на WWW.your_domain.com
Здесь вы можете найти пошаговые инструкции
fooobar.com/questions/45752/...
Ответ 3
Чтобы указать ваш apex/root/naked domain в приложении, размещенном в Heroku, вам нужно будет использовать поставщика DNS, который поддерживает записи CNAME (часто называемые записями ALIAS или ANAME). В настоящее время Heroku рекомендует:
Какой бы вы ни выбрали, ваша запись будет выглядеть следующим образом:
Запись: ALIAS
или ANAME
Имя: пусто или @
Цель: example.com.herokudns.com.
Это все, что вам нужно.
Однако не подходит для SEO, чтобы разрешить как версию www, так и не-www. Нужно указать на другой как канонический URL. Как вы это решаете, зависит от того, используете ли вы HTTPS или нет. И если вы этого не сделаете, вы, вероятно, должны быть теперь как Heroku автоматически обрабатывает SSL-сертификаты для всех приложений, работающих на платных дино.
Если вы не используете HTTPS, вы можете просто настроить 301 запись переадресации с большинством DNS-провайдеров с указанием имени www
на http://example.com
.
Если вы используете HTTPS, вам, скорее всего, придется обработать перенаправление на уровне приложения. Если вы хотите знать, почему, посмотрите short и long, но в основном, поскольку ваш поставщик DNS или другая служба пересылки URL-адресов не имеют и не должны иметь ваш сертификат SSL и закрытый ключ, они не могут отвечать на запросы HTTPS для вашего домена.
Чтобы обрабатывать перенаправления на уровне приложения, вам необходимо:
- Добавьте и ваши имена вершины и www-хоста в приложение Heroku (
heroku domains:add example.com
и heroku domains:add www.example.com
)
- Настройте сертификаты SSL
- Направьте свою запись на вершину в Heroku, используя запись ALIAS или ANAME, как описано выше.
- Добавьте запись CNAME с именем
www
, указывающим на www.example.com.herokudns.com.
- И затем в вашем приложении 301 перенаправляет любые www-запросы на URL-адрес, отличный от www (здесь пример, как это сделать в Django)
- Также в вашем приложении вы, вероятно, должны перенаправить любые HTTP-запросы на HTTPS (например, в Django установить
SECURE_SSL_REDIRECT
в True
)
Зайдите этот пост из DNSimple для более.
Ответ 4
Вам не разрешено иметь запись CNAME для домена, поскольку CNAME - это функция сглаживания, которая охватывает все типы данных (независимо от того, ищет ли клиент MX, NS или записи SOA). CNAME также всегда ссылаются на новое имя, а не на ip-адрес, поэтому на одной строке
на самом деле две ошибки
@ IN CNAME 88.198.38.XXX
Изменение этого CNAME на запись A должно заставить его работать, при условии, что IP-адрес, который вы используете, является правильным для вашего приложения Heroku.
Единственный правильный способ в DNS сделать простое имя domain.com
работать в браузере - указать домен на IP-адрес с записью A.