Як налаштувати DNS для домену apex (без www), що вказує на додаток Heroku?


97

Я вже додав власний домен у свій додаток 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?


btw схоже, що ваші налаштування ftp / pop / smtp неправильні, оскільки він вказує на www, який вказує на heroku, який не робить ftp / pop / smtp.
kch

Відповіді:


145

(Примітка: кореневий, базовий, 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 на вершині зони (базовий домен). (Наприклад, записи MX порушуються, оскільки спочатку CNAME буде спрямовано до своєї цілі.)

Повертаючись до кореневих доменів, простим і загальним рішенням є взагалі не використовувати їх. Як запасний захід, деякі постачальники DNS пропонують встановити для вас перенаправлення HTTP. У такому випадку налаштуйте його таким чином, щоб example.comце було HTTP-перенаправлення на www.example.com.

Деякі постачальники DNS запропонували власні рішення, які дозволяють поведінку, подібну до CNAME, на вершині зони. Наскільки мені відомо, у нас є ALIAS запис DNSimple в і ANAME запис DNS Made Easy в ; обидва поводяться однаково.

Використовуючи їх, ви можете налаштувати свої записи як (використовуючи нотацію zonefile, навіть якщо ви, мабуть, зробите це в їх веб-інтерфейсі):

@   IN ALIAS your-app-name.herokuapp.com.
www IN CNAME your-app-name.herokuapp.com.

Пам'ятайте, @тут є скорочення для кореневого домену ( example.com). Також пам’ятайте, що кінцеві точки важливі як у файлах зон, так і в деяких веб-інтерфейсах користувача.

Дивитися також:

Зауваження:

  • На маршруті Amazon Amazon 53 також є тип запису ALIAS, але він дещо обмежений, оскільки працює лише в напрямку AWS. На даний момент я б не рекомендував використовувати це для налаштування Heroku.

  • Деякі люди плутають постачальників DNS з реєстраторами доменних імен, оскільки існує певне перекриття з компаніями, що пропонують обидва. Майте на увазі, що для переключення DNS на одного з вищезазначених постачальників вам потрібно лише оновити записи сервера імен за допомогою поточного реєстратора доменів. Вам не потрібно переносити реєстрацію домену.



3
+1 за згадку про dnsimple. Їхні зусилля щодо спрощення роботи з хмарними провайдерами стали важливим фактором мого рішення перейти на них.
Subfuzion

1
@kch ти знаєш, як я можу створити тип запису DNS, який поводиться як Псевдонім DNSimple у BIND?
wlf

1
Не думайте, що можете. Це спеціальна функція.
kch

2
CloudFlare також надає ці функції завдяки тому, що вони називають згладжуванням CNAME . Вони автоматично роблять це для записів CNAME, які ви створюєте в кореневій папці, але вони дозволять це робити у всій вашій зоні для всіх записів CNAME, якщо ви з ними зв’яжетесь і попросите.
Адріан Фрюхвірт,

4

Щоб вказати свій домен apex / root / goli на розміщеному на Heroku додатку, вам потрібно буде використовувати постачальника DNS, який підтримує записи, подібні до CNAME (часто їх називають записами ALIAS або ANAME). На даний момент Heroku рекомендує :

Незалежно від того, кого ви оберете, ваш запис буде виглядати наступним чином:

Запис: ALIAS абоANAME

Назва: порожній або@

Ціль: example.com.herokudns.com.

Це все, що вам потрібно.


Однак для SEO не годиться вирішувати як версію www, так і версію, що не є www. Один повинен вказувати на інший як канонічну URL-адресу. Як ви вирішите це зробити, залежить від того, використовуєте ви HTTPS чи ні. А якщо ні, ви, мабуть, повинні бути, оскільки Heroku тепер обробляє для вас сертифікати SSL автоматично та безкоштовно для всіх програм, що працюють на платних динозаврах.

Якщо ви не використовуєте HTTPS, ви можете просто створити 301 Redirect запис з більшістю провайдерів DNS , що вказують ім'я wwwв http://example.com.

Якщо будуть з допомогою HTTPS, ви , швидше за все , потрібно обробляти перенаправлення на рівні додатку. Якщо ви хочете знати, чому, перегляньте ці короткі та довгі пояснення, але в основному, оскільки ваш постачальник DNS або інша служба переадресації URL-адрес не має і не повинна мати вашого SSL-сертифіката та приватного ключа, вони не можуть відповісти на HTTPS запити на ваш домен.

Щоб обробляти переспрямування на рівні програми, вам потрібно:

  • Додайте імена своїх вершин і веб-хосту до програми Heroku ( heroku domains:add example.comі heroku domains:add www.example.com)
  • Налаштуйте свої SSL-сертифікати
  • Наведіть свій запис домену apex на Heroku, використовуючи запис ALIAS або ANAME, як описано вище
  • Додайте запис CNAME із wwwвказівкою на ім’яwww.example.com.herokudns.com.
  • А потім у вашій програмі 301 перенаправляє будь-які запити www на URL-адресу, що не є www ( ось приклад того, як це зробити в Django)
  • Також у вашій програмі вам слід перенаправити будь-які HTTP-запити на HTTPS (наприклад, у Django, встановленому SECURE_SSL_REDIRECTна True)

Перегляньте цю публікацію від DNSimple, щоб дізнатися більше.


3

Зараз я використовую Google Apps (для електронної пошти) та Heroku як веб-сервер. Я використовую функцію постійного перенаправлення Google Apps 301 для перенаправлення відкритого домену на WWW.your_domain.com

Покрокові інструкції ви можете знайти тут https://stackoverflow.com/a/20115583/1440255


2

Вам не дозволено мати запис CNAME для домену, оскільки CNAME - це функція псевдонімів, яка охоплює всі типи даних (незалежно від того, чи шукає клієнт записи MX, NS або SOA). CNAME також завжди посилаються на нову назву, а не на ip-адресу, тому насправді в одному рядку є дві помилки

@                        IN CNAME   88.198.38.XXX

Зміна цього CNAME на запис A повинна забезпечити його роботу, за умови, що використовувана вами ip-адреса є правильною для вашої програми Heroku.

Єдиний правильний спосіб у DNS зробити просте domain.comім’я в браузері - це направити домен на IP-адресу із записом A.


Гаразд, але як я можу дізнатися свій IP? Через хост appname.herokuapp.com/www.domain.com я просто отримую такий IP-адресу: 107.20.162.205 (немає такої програми Heroku)
mrks

1
Цей IP слід використовувати. Ви просто не можете протестувати в браузері з IP-адресою, оскільки Heroku має знати назву програми, яку ви намагаєтесь використовувати. Просто налаштуйте запис A у DNS і протестуйте, ніж, і Heroku побачить ім'я, яке ви використовуєте, і все повинно бути добре!
krisku

Гаразд, але я отримую кожен раз інший IP після "host appname.herokuapp.com".
mrks

2
host app-name.herokuapp.comрезультати динамічні. Якщо ви встановите жорсткий код, ваш додаток з часом загальмує. Див. Рішення ANAME / CNAME, рекомендовані в іншому коментарі.
kch

1
Вам потрібен веб-сервер із незмінною IP-адресою, який може виконати HTTP-перенаправлення з домену.com -> www.domain.com та вказувати домен.com на цю IP-адресу. Тоді ви можете мати CNAME для www.domain.com вказувати на реальний додаток heroku.
krisku
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.