Как настроить 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?
4 ответа:
(Примечание: Домены root, base, apex-это одно и то же. Использование взаимозаменяемо для google-foo.)
Традиционно, чтобы указать свой домен apex, вы должны использовать запись A, указывающую на IP-адрес вашего сервера. Это решение не масштабируется и не является жизнеспособным для облачной платформы, такой как Heroku, где несколько и часто меняющихся бэкэндов отвечают за ответ на запросы.
для поддоменов (например,
www.example.com
) вы можете использовать записи CNAME, указывающие наyour-app-name.herokuapp.com
. Оттуда, Heroku управляет динамическими записями a позадиyour-app-name.herokuapp.com
Так что они всегда актуальны. К сожалению, спецификация DNS не позволяет записывать CNAME в зоне apex (базовый домен). (Например, записи MX будут разбиты, поскольку CNAME будет следовать к своей цели в первую очередь.)назад к корневым доменам, простое и универсальное решение заключается в том, чтобы не использовать их вообще. В качестве резервной меры некоторые поставщики DNS предлагают настроить перенаправление HTTP для вас. В этом случае установите его так, чтобы
example.com
- это перенаправление HTTP наwww.example.com
.некоторые поставщики DNS выступили с пользовательскими решениями, которые позволяют CNAME-подобное поведение на вершине зоны. Насколько мне известно, у нас есть запись псевдонима DNSimple и ДНС легко по имени записи; оба ведут себя аналогично.
используя их, вы можете настроить свои записи как (используя нотацию zonefile, даже если вы, вероятно, сделаете это в своем веб-интерфейсе пользователя):
@ IN ALIAS your-app-name.herokuapp.com. www IN CNAME your-app-name.herokuapp.com.
запомнить
@
вот сокращение для корневого домена (example.com
). Также имейте в виду, что конечные точки важны, как в zonefiles, так и в некоторых веб-интерфейсах пользователей.Читайте также:
Примечания:
маршрут 53 Amazon также имеет тип записи псевдонима, но он несколько ограничен, в что он работает только для указания в AWS. На данный момент я бы не рекомендовал использовать это для установки в Heroku.
некоторые люди путают DNS-провайдеров с регистраторами доменных имен, так как есть немного перекрытия с компаниями, предлагающими оба. Имейте в виду, что для переключения DNS на один из вышеупомянутых поставщиков вам нужно только обновить записи сервера имен с помощью текущего регистратора домена. Вам не нужно передавать свой домен регистрация.
теперь я использую Google Apps (для электронной почты) и Heroku в качестве веб-сервера. Я использую функцию постоянного перенаправления Google Apps 301 для перенаправления голого домена на WWW.your_domain.com
вы можете найти пошаговые инструкции здесь https://stackoverflow.com/a/20115583/1440255
чтобы указать ваш apex / root / naked домен в Heroku-размещенном приложении, вам нужно будет использовать DNS-провайдера, который поддерживает CNAME-подобные записи (часто называемые псевдонимами или записями ANAME). В Настоящее Время Heroku рекомендует:
- псевдоним в DNSimple
- ANAME в DNS сделал легко
- АИМЯ на пользуетесь услугами регистратора easydns
- псевдоним на PointDNS
- CNAME в CloudFlare
какой бы из них вы ни выбрали, ваша запись будет выглядеть следующим образом:
запись:
ALIAS
илиANAME
название: пустой или
@
цель:
example.com.herokudns.com.
это все, что вам нужно.
, это не хорошо для SEO чтобы иметь оба www версия и не-www версия решения. Следует указать на другие в качестве канонического URL-адреса. Как вы решите это сделать, зависит от того, используете ли вы HTTPS или нет. И если это не так, вы, вероятно, должны быть как Heroku сейчас обрабатывает SSL-сертификаты для вас автоматически и бесплатно для всех приложений, работающих на платной стенда.если вы не используете HTTPS, вы можете просто настроить запись перенаправления 301 с большинством DNS-провайдеров, указывающих имя
www
tohttp://example.com
.если вы are используя HTTPS, вам, скорее всего, придется обрабатывать перенаправление на уровне приложения. Если вы хотите знать, почему, проверьте эти короче и долго объяснения но в основном, поскольку ваш DNS-провайдер или другая служба пересылки URL-адресов не имеет и не должны иметь Вашего SSL-сертификата и закрытого ключа, они не могут отвечать на запросы HTTPS для вашего домена.
для обработки перенаправления на уровень приложения, вам нужно:
- добавьте имена хостов apex и www в приложение Heroku (
heroku domains:add example.com
иheroku domains:add www.example.com
)- настройка SSL-сертификатов
- наведите свою запись домена apex на Heroku, используя псевдоним или запись ANAME, как описано выше
- добавить запись CNAME с именем
www
указывая наwww.example.com.herokudns.com.
- и затем в вашем приложении 301 перенаправляет любые запросы www на не-www URL (вот пример как это сделать в Django)
- также в вашем приложении вы, вероятно, должны перенаправлять любые HTTP-запросы на HTTPS (например,в Django set
SECURE_SSL_REDIRECT
доTrue
)проверить этот пост от DNSimple для больше.
вы не можете иметь запись CNAME для домена, так как CNAME-это функция псевдонимов, которая охватывает все типы данных (независимо от того, ищет ли клиент записи MX, NS или SOA). CNAMEs также всегда ссылаются на новое имя, а не на ip-адрес, поэтому на самом деле две ошибки в одну строку
@ IN CNAME 88.198.38.XXX
изменение CNAME на запись A должно заставить его работать, при условии, что ip-адрес, который вы используете, является правильным для вашего приложения Heroku.
единственный правильный способ в DNS сделать простой
domain.com
имя работы в браузере, чтобы указать домен на IP-адрес с записью А.