web-dev-qa-db-fra.com

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

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 www pour résoudre l'application également.

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 pour que example.com et www.example.com pointerais-je correctement vers mon application Heroku?

89
mrks

(Remarque: les domaines racine, base et sommet sont tous identiques. Utiliser de manière interchangeable pour google-foo.)

Traditionnellement, pour pointer votre domaine apex, vous utilisiez un enregistrement A pointant vers l'adresse IP de votre serveur. Cette solution n'évolue pas et n'est pas viable pour une plate-forme cloud telle que Heroku, où plusieurs serveurs principaux et fréquemment modifiés sont chargés de répondre aux demandes.

Pour les sous-domaines (comme www.example.com) vous pouvez utiliser les enregistrements CNAME pointant vers your-app-name.herokuapp.com. A partir de là, Heroku gère les enregistrements A dynamiques derrière le your-app-name.herokuapp.com afin 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 se briseraient lorsque le CNAME serait suivi en premier sur sa cible.)

Retour aux domaines racine, la solution simple et générique est de ne pas les utiliser du tout. Par mesure de repli, certains fournisseurs DNS proposent de configurer une redirection HTTP pour vous. Dans ce cas, configurez-le pour que example.com est une redirection HTTP vers www.example.com.

Certains fournisseurs DNS ont proposé des solutions personnalisées autorisant un comportement semblable à CNAME au sommet de la zone. À ma connaissance, nous avons enregistrement ALIAS de DNSimple et enregistrement 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 zonefile, 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.

Rappelles toi @ 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é, car il ne fonctionne que pour pointer dans AWS. Pour le moment, je ne recommanderais pas d'utiliser ceci pour une configuration Heroku.

  • Certaines personnes confondent les fournisseurs DNS avec les registraires de noms de domaine, car il y a un peu de chevauchement avec les entreprises offrant les deux. Notez 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.

138
kch

Pour que votre domaine apex/root/naked pointe vers une application hébergée par Heroku, vous devez utiliser un fournisseur DNS prenant en charge les enregistrements de type CNAME (souvent appelés enregistrements ALIAS ou ANAME). Actuellement Heroku recommande :

Quel que soit votre choix, votre dossier ressemblera à ce qui suit:

Enregistrement: ALIAS ou ANAME

Nom: vide ou @

Cible: example.com.herokudns.com.

C'est tout ce dont vous avez besoin.


Cependant, il est ce n'est pas bien pour le référencement de résoudre à la fois les versions www et non www. L'un devrait pointer sur l'autre en tant qu'URL canonique. La façon dont vous décidez de le faire dépend si vous utilisez HTTPS ou non. Et si vous ne l'êtes pas, vous devriez probablement être comme Heroku maintenant gère 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 www sur http://example.com.

Si vous are utilisez HTTPS, vous devrez probablement gérer la redirection au niveau de l'application. Si vous voulez savoir pourquoi, consultez ces explications courtes et longues , mais fondamentalement, 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 aux demandes HTTPS de votre domaine.

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

  • Ajoutez vos noms d’hôtes apex et www à l’application Heroku (heroku domains:add example.com et heroku domains:add www.example.com)
  • Configurez vos certificats SSL
  • Pointez votre enregistrement de domaine apex chez Heroku en utilisant un enregistrement ALIAS ou ANAME comme décrit ci-dessus.
  • Ajoutez un enregistrement CNAME avec le nom www pointant vers www.example.com.herokudns.com.
  • Et puis dans votre application, 301 redirige toutes les demandes www vers l'URL non www ( voici un exemple comment le faire dans Django)
  • Toujours dans votre application, vous devriez probablement rediriger les requêtes HTTP vers HTTPS (par exemple, dans Django set SECURE_SSL_REDIRECT à True)

Départ ce post de DNSimple pour plus.

3
Jeff Bowen

J'utilise maintenant 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.fr

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

3
Leo Tulipan

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

@                        IN CNAME   88.198.38.XXX

Le fait de changer ce CNAME en un enregistrement A devrait le faire fonctionner, à condition que l'adresse IP que vous utilisez soit celle qui convient pour votre application Heroku.

La seule manière correcte dans le DNS de créer un simple domain.com nom fonctionne dans le navigateur, est de pointer le domaine vers une adresse IP avec un enregistrement A.

2
krisku