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