Как настроить 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 86

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 рекомендует:

какой бы из них вы ни выбрали, ваша запись будет выглядеть следующим образом:

запись:ALIAS или ANAME

название: пустой или @

цель:example.com.herokudns.com.

это все, что вам нужно.


, это не хорошо для SEO чтобы иметь оба www версия и не-www версия решения. Следует указать на другие в качестве канонического URL-адреса. Как вы решите это сделать, зависит от того, используете ли вы HTTPS или нет. И если это не так, вы, вероятно, должны быть как Heroku сейчас обрабатывает SSL-сертификаты для вас автоматически и бесплатно для всех приложений, работающих на платной стенда.

если вы не используете HTTPS, вы можете просто настроить запись перенаправления 301 с большинством DNS-провайдеров, указывающих имя www to http://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-адрес с записью А.