Comment configurer DNS pour un domaine Apex (pas de www) pointant vers une application Heroku?

97

J'ai déjà ajouté un domaine personnalisé à mon application Heroku et cela fonctionne avec www.domain.com.

J'ai besoin de savoir comment configurer le domaine sans wwwpour autant me résoudre à l'application.

Voici mes paramètres DNS actuels:

$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

Quels sont les paramètres corrects à utiliser afin que les deux example.comet www.example.compointerait correctement à mon application Heroku?

mrks
la source
btw ressemble à vos paramètres ftp / pop / smtp sont tous faux, car ils pointent vers www, qui pointe vers heroku, qui ne fait pas ftp / pop / smtp.
kch
Une autre solution stackoverflow.com/a/11494197/176877
Chris Moschini

Réponses:

145

(Remarque: les domaines racine, de base et apex sont tous la même chose. Utilisation interchangeable pour google-foo.)

Traditionnellement, pour pointer votre domaine apex, vous utiliseriez un enregistrement A pointant vers l'adresse IP de votre serveur. Cette solution ne s'adapte pas et n'est pas viable pour une plate-forme cloud comme Heroku, où de multiples backends changeants sont chargés de répondre aux demandes.

Pour les sous-domaines (comme www.example.com), vous pouvez utiliser des enregistrements CNAME pointant vers your-app-name.herokuapp.com. À partir de là, Heroku gère les enregistrements A dynamiques derrière your-app-name.herokuapp.comafin qu'ils soient toujours à jour. Malheureusement, la spécification DNS n'autorise pas les enregistrements CNAME sur l'apex de la zone (le domaine de base). (Par exemple, les enregistrements MX seraient interrompus car le CNAME serait d'abord suivi jusqu'à sa cible.)

De retour aux domaines racine, la solution simple et générique est de ne pas les utiliser du tout. Comme mesure de secours, certains fournisseurs DNS proposent de configurer une redirection HTTP pour vous. Dans ce cas, configurez-le pour qu'il s'agisse d' example.comune redirection HTTP vers www.example.com.

Certains fournisseurs DNS ont proposé des solutions personnalisées qui permettent un comportement de type CNAME sur l'apex de la zone. A ma connaissance, nous avons le dossier ALIAS de DNSimple et le dossier ANAME de DNS Made Easy ; les deux se comportent de la même manière.

En utilisant ceux-ci, vous pouvez configurer vos enregistrements comme (en utilisant la notation de fichier de zone, même si vous le ferez probablement sur leur interface utilisateur Web):

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

N'oubliez pas que @voici un raccourci pour le domaine racine ( example.com). Notez également que les points de fin sont importants, à la fois dans les fichiers de zone et dans certaines interfaces utilisateur Web.

Voir également:

Remarques:

  • La Route 53 d'Amazon a également un type d'enregistrement ALIAS, mais il est quelque peu limité, en ce sens qu'il ne fonctionne que pour pointer dans AWS. Pour le moment, je ne recommanderais pas de l'utiliser pour une configuration Heroku.

  • Certaines personnes confondent les fournisseurs DNS avec les bureaux d'enregistrement de noms de domaine, car il y a un peu de chevauchement avec les entreprises offrant les deux. N'oubliez pas que pour basculer votre DNS vers l'un des fournisseurs susmentionnés, il vous suffit de mettre à jour vos enregistrements de serveur de noms avec votre registraire de domaine actuel. Vous n'avez pas besoin de transférer votre enregistrement de domaine.

kch
la source
1
Voir également Heroku's Dev Center
Jon Mountjoy
3
+1 pour mentionner dnsimple. Leurs efforts pour faciliter le travail avec les fournisseurs de cloud ont été un facteur important dans ma décision de passer à eux.
Subfuzion
1
@kch savez-vous comment je peux créer un type d'enregistrement DNS qui se comporte comme l'ALIAS de DNSimple dans BIND?
wlf
1
Ne pensez pas que vous pouvez. C'est une fonctionnalité personnalisée.
kch
2
CloudFlare fournit également ces fonctionnalités via ce qu'ils appellent l' aplatissement CNAME . Ils le font automatiquement pour les enregistrements CNAME que vous créez à la racine, mais ils l'activeront sur toute votre zone pour tous les enregistrements CNAME si vous les contactez et le demandez.
Adrian Frühwirth
4

Pour pointer votre domaine apex / racine / nu vers une application hébergée par Heroku, vous devrez utiliser un fournisseur DNS qui prend en charge les enregistrements de type CNAME (souvent appelés enregistrements ALIAS ou ANAME). Actuellement Heroku recommande :

Quel que soit celui que vous choisissez, votre enregistrement ressemblera à ce qui suit:

Enregistrer: ALIAS ouANAME

Nom: vide ou@

Cible: example.com.herokudns.com.

C'est tout ce dont vous avez besoin.


Cependant, il n'est pas bon pour le SEO de résoudre à la fois la version www et la version non www. L'un doit pointer vers l'autre comme URL canonique. La façon dont vous décidez de faire cela dépend de si vous utilisez HTTPS ou non. Et si vous ne l'êtes pas, vous devriez probablement l'être car Heroku gère désormais les certificats SSL pour vous automatiquement et gratuitement pour toutes les applications fonctionnant sur des dynos payants.

Si vous n'utilisez pas HTTPS, vous pouvez simplement configurer un enregistrement de redirection 301 avec la plupart des fournisseurs DNS pointant le nom wwwvers http://example.com.

Si vous êtes utilisez HTTPS, vous aurez probablement besoin de gérer la redirection au niveau de l' application. Si vous voulez savoir pourquoi, consultez ces explications courtes et longues , mais essentiellement puisque votre fournisseur DNS ou un autre service de transfert d'URL n'a pas et ne devrait pas avoir votre certificat SSL et votre clé privée, ils ne peuvent pas répondre à HTTPS demandes pour votre domaine.

Pour gérer les redirections au niveau de l'application, vous devrez:

  • Ajoutez vos noms d'hôtes apex et www à l'application Heroku ( heroku domains:add example.comet heroku domains:add www.example.com)
  • Configurez vos certificats SSL
  • Dirigez votre enregistrement de domaine apex vers Heroku en utilisant un enregistrement ALIAS ou ANAME comme décrit ci-dessus
  • Ajouter un enregistrement CNAME dont le nom wwwpointe verswww.example.com.herokudns.com.
  • Et puis dans votre application, 301 redirige toutes les requêtes www vers l'URL non www ( voici un exemple de comment le faire dans Django)
  • Également dans votre application, vous devriez probablement rediriger toutes les requêtes HTTP vers HTTPS (par exemple, dans Django défini SECURE_SSL_REDIRECTsur True)

Consultez cet article de DNSimple pour en savoir plus.

Jeff Bowen
la source
3

J'utilise désormais Google Apps (pour la messagerie électronique) et Heroku comme serveur Web. J'utilise la fonctionnalité de redirection permanente de Google Apps 301 pour rediriger le domaine nu vers WWW.votre_domaine.com

Vous pouvez trouver les instructions étape par étape ici https://stackoverflow.com/a/20115583/1440255

Leo Tulipan
la source
2

Vous n'êtes pas autorisé à avoir un enregistrement CNAME pour le domaine, car le CNAME est une fonctionnalité d'alias qui couvre tous les types de données (que le client recherche des enregistrements MX, NS ou SOA). Les CNAME font également toujours référence à un nouveau nom, pas à une adresse IP, il y a donc en fait deux erreurs dans la seule ligne

@                        IN CNAME   88.198.38.XXX

Changer ce CNAME en enregistrement A devrait le faire fonctionner, à condition que l'adresse IP que vous utilisez soit la bonne pour votre application Heroku.

La seule façon correcte dans DNS de faire fonctionner un domain.comnom simple dans le navigateur, est de pointer le domaine vers une adresse IP avec un enregistrement A.

Krisku
la source
Ok mais comment puis-je connaître mon adresse IP? Via l'hôte appname.herokuapp.com/www.domain.com, je viens d'obtenir une adresse IP comme celle-ci: 107.20.162.205 (No such Heroku App)
mrks
1
Cette adresse IP est celle à utiliser. Vous ne pouvez tout simplement pas tester dans le navigateur avec une adresse IP, car Heroku a besoin de connaître le nom de l'application que vous essayez d'utiliser. Configurez simplement l'enregistrement A dans DNS et testez avec que, et Heroku verra le nom que vous utilisez et tout devrait bien se passer!
krisku
Ok mais j'obtiens à chaque fois une autre adresse IP après "host appname.herokuapp.com".
mrks
2
host app-name.herokuapp.comles résultats sont dynamiques. Si vous les codez en dur, votre application finira par s'arrêter. Voir les solutions ANAME / CNAME recommandées dans un autre commentaire.
kch
1
Vous avez besoin d'un serveur Web avec une adresse IP qui ne change pas et qui peut effectuer une redirection HTTP depuis domain.com -> www.domain.com, et pointer domain.com vers cette adresse IP. Ensuite, vous pouvez faire pointer CNAME pour www.domain.com vers la vraie application heroku.
krisku