Jak skonfigurować DNS dla domeny wierzchołkowej (bez www) wskazującej aplikację Heroku?

97

Dodałem już niestandardową domenę do mojej aplikacji Heroku i działa z www.domain.com.

Muszę też wiedzieć, jak skonfigurować domenę bez wwwrozwiązywania problemów z aplikacją.

Oto moje aktualne ustawienia 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

Jakich ustawień należy użyć, aby oba example.comi www.example.comwskazywały poprawnie moją aplikację Heroku?

mrks
źródło
btw wygląda na to, że twoje ustawienia ftp / pop / smtp są błędne, ponieważ wskazuje na www, co wskazuje na heroku, który nie obsługuje ftp / pop / smtp.
kch
Inne rozwiązanie stackoverflow.com/a/11494197/176877
Chris Moschini.

Odpowiedzi:

145

(Uwaga: domeny root, base, apex to to samo. Używaj zamiennie dla google-foo.)

Tradycyjnie, aby wskazać domenę wierzchołkową, należy użyć rekordu A wskazującego adres IP serwera. To rozwiązanie nie jest skalowalne i nie jest opłacalne dla platformy chmurowej, takiej jak Heroku, gdzie wiele i często zmieniających się backendów jest odpowiedzialnych za odpowiadanie na żądania.

W przypadku subdomen (takich jak www.example.com) możesz użyć rekordów CNAME wskazujących na your-app-name.herokuapp.com. Od tego momentu Heroku zarządza dynamicznymi rekordami A your-app-name.herokuapp.com, aby były zawsze aktualne. Niestety specyfikacja DNS nie zezwala na rekordy CNAME w wierzchołku strefy (domenie podstawowej). (Na przykład rekordy MX uległyby uszkodzeniu, ponieważ CNAME byłby najpierw śledzony do celu).

Wracając do domen głównych, prostym i ogólnym rozwiązaniem jest w ogóle ich nie używać. W ramach środka zastępczego niektórzy dostawcy DNS oferują skonfigurowanie przekierowania HTTP za Ciebie. W takim przypadku skonfiguruj go tak, aby example.combyło przekierowaniem HTTP do www.example.com.

Niektórzy dostawcy DNS zaproponowali niestandardowe rozwiązania, które umożliwiają zachowanie podobne do CNAME na wierzchołku strefy. Według mojej wiedzy, mamy rekord ALIAS DNSimple za i rekord ÁNazwy DNS Made Easy jest ; oba zachowują się podobnie.

Korzystając z nich, możesz skonfigurować swoje rekordy jako (używając notacji pliku strefy, nawet jeśli prawdopodobnie zrobisz to w ich internetowym interfejsie użytkownika):

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

Pamiętaj, że @tutaj jest skrót nazwy domeny głównej ( example.com). Pamiętaj również, że kropki na końcu są ważne, zarówno w plikach stref, jak i niektórych interfejsach użytkownika.

Zobacz też:

Uwagi:

  • Amazon's Route 53 również ma typ rekordu ALIAS, ale jest nieco ograniczony, ponieważ działa tylko w celu wskazywania w AWS. W tej chwili nie polecałbym używania tego w konfiguracji Heroku.

  • Niektórzy mylą dostawców DNS z rejestratorami nazw domen, ponieważ w pewnym stopniu pokrywają się one z firmami oferującymi jedno i drugie. Pamiętaj, że aby przełączyć DNS na jednego z wyżej wymienionych dostawców, wystarczy zaktualizować rekordy serwera nazw u obecnego rejestratora domen. Nie musisz przenosić rejestracji domeny.

kch
źródło
1
Zobacz też Centrum deweloperów Heroku
Jon Mountjoy
3
+1 za wspomnienie o dnsimple. Ich wysiłki, aby ułatwić współpracę z dostawcami usług w chmurze, miały duży wpływ na moją decyzję o przejściu na nich.
Subfuzion
1
@kch, czy wiesz, jak mogę utworzyć typ rekordu DNS, który zachowuje się jak ALIAS DNSimple w BIND?
wlf
1
Nie myśl, że możesz. To niestandardowa funkcja.
kch
2
CloudFlare zapewnia również te funkcje poprzez to, co nazywają spłaszczaniem CNAME . Robią to automatycznie dla rekordów CNAME, które tworzysz u źródła, ale włączą to w całej strefie dla wszystkich rekordów CNAME, jeśli skontaktujesz się z nimi i poprosisz o to.
Adrian Frühwirth
4

Aby skierować domenę wierzchołkową / główną / samą domenę na aplikację hostowaną w Heroku, musisz użyć dostawcy DNS, który obsługuje rekordy podobne do CNAME (często określane jako rekordy ALIAS lub ANAME). Obecnie Heroku poleca :

Niezależnie od tego, które wybierzesz, Twój rekord będzie wyglądał następująco:

Rekord: ALIAS lubANAME

Nazwa: puste lub@

Cel: example.com.herokudns.com.

To wszystko, czego potrzebujesz.


Jednak nie jest dobre dla SEO, aby rozwiązywać zarówno wersję www, jak i wersję inną niż www. Jeden powinien wskazywać na drugi jako kanoniczny adres URL. To, w jaki sposób zdecydujesz się to zrobić, zależy od tego, czy używasz protokołu HTTPS, czy nie. A jeśli nie, prawdopodobnie powinieneś być taki, jak Heroku obsługuje teraz certyfikaty SSL automatycznie i bezpłatnie dla wszystkich aplikacji działających na płatnych hamowniach.

Jeśli nie używasz HTTPS, można po prostu założyć rekord przekierowanie 301 z większością dostawców DNS wskazujące nazwę wwwna http://example.com.

Jeśli za pomocą protokołu HTTPS, będziesz najprawdopodobniej potrzeba obsłużyć przekierowanie na poziomie aplikacji. Jeśli chcesz wiedzieć, dlaczego, zapoznaj się z tymi krótkimi i długimi wyjaśnieniami, ale w zasadzie, ponieważ Twój dostawca DNS lub inna usługa przekazywania adresów URL nie ma i nie powinna mieć Twojego certyfikatu SSL i klucza prywatnego, nie mogą odpowiadać na HTTPS żądania dotyczące Twojej domeny.

Aby obsłużyć przekierowania na poziomie aplikacji, musisz:

  • Dodaj nazwy hosta apex i www do aplikacji Heroku ( heroku domains:add example.comi heroku domains:add www.example.com)
  • Skonfiguruj swoje certyfikaty SSL
  • Skieruj swój rekord domeny wierzchołka na Heroku, używając rekordu ALIAS lub ANAME, jak opisano powyżej
  • Dodaj rekord CNAME z nazwą wwwwskazującą nawww.example.com.herokudns.com.
  • A następnie w twojej aplikacji 301 przekierowuj wszelkie żądania www na adres URL inny niż www ( tutaj jest przykład, jak to zrobić w Django)
  • Również w swojej aplikacji powinieneś prawdopodobnie przekierować wszelkie żądania HTTP do HTTPS (na przykład w Django ustawione SECURE_SSL_REDIRECTna True)

Więcej informacji znajdziesz w tym poście od DNSimple.

Jeff Bowen
źródło
3

Obecnie używam Google Apps (dla poczty e-mail) i Heroku jako serwera internetowego. Używam funkcji stałego przekierowania Google Apps 301, aby przekierować samą domenę na WWW.twoja_domena.com

Szczegółowe instrukcje znajdziesz tutaj: https://stackoverflow.com/a/20115583/1440255

Leo Tulipan
źródło
2

Nie możesz mieć rekordu CNAME dla domeny, ponieważ CNAME to funkcja aliasingu obejmująca wszystkie typy danych (niezależnie od tego, czy klient szuka rekordów MX, NS czy SOA). CNAME również zawsze odnoszą się do nowej nazwy, a nie do adresu IP, więc w rzeczywistości są dwa błędy w jednym wierszu

@                        IN CNAME   88.198.38.XXX

Zmiana tego CNAME na rekord A powinna sprawić, że to zadziała, pod warunkiem, że używany adres IP jest prawidłowy dla aplikacji Heroku.

Jedynym poprawnym sposobem w DNS, aby prosta domain.comnazwa działała w przeglądarce, jest wskazanie domeny na adres IP z rekordem A.

krisku
źródło
Ok, ale jak mogę znaleźć moje IP? Poprzez host appname.herokuapp.com/www.domain.com otrzymuję taki adres IP: 107.20.162.205 (Nie ma takiej aplikacji Heroku)
mrks
1
Tego adresu IP należy używać. Po prostu nie możesz przetestować w przeglądarce adresu IP, ponieważ Heroku musi znać nazwę aplikacji, której próbujesz użyć. Po prostu skonfiguruj rekord A w DNS i przetestuj z than, a Heroku zobaczy nazwę, której używasz i wszystko powinno być dobrze!
krisku
Ok, ale za każdym razem otrzymuję kolejny adres IP po „host appname.herokuapp.com”.
pan
2
host app-name.herokuapp.comwyniki są dynamiczne. Jeśli zakodujesz je na stałe, Twoja aplikacja w końcu ulegnie awarii. Zobacz rozwiązania ANAME / CNAME zalecane w innym komentarzu.
kch
1
Potrzebujesz serwera WWW z niezmiennym adresem IP, który może wykonać przekierowanie HTTP ze strony domena.com -> www.domena.com i wskazać domenie.com na ten adres IP. Wtedy możesz mieć CNAME dla www.domain.com wskazujące na prawdziwą aplikację heroku.
krisku