Come si configura il DNS per un dominio Apex (no www) che punta a un'app Heroku?


97

Ho già aggiunto un dominio personalizzato alla mia app Heroku e funziona con www.domain.com.

Ho bisogno di sapere come configurare il dominio senza wwwdover risolvere anche l'app.

Ecco le mie attuali impostazioni 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

Quali sono le impostazioni corrette da utilizzare in modo che sia example.come www.example.compuntino correttamente alla mia app Heroku?


btw sembra che le tue impostazioni ftp / pop / smtp siano tutte sbagliate, dato che punta a www, che punta a heroku, che non esegue ftp / pop / smtp.
kch

Risposte:


145

(Nota: i domini root, base, apex sono tutti la stessa cosa. Usando in modo intercambiabile per google-foo.)

Tradizionalmente, per puntare il tuo dominio Apex dovresti usare un record A che punta all'IP del tuo server. Questa soluzione non è scalabile e non è fattibile per una piattaforma cloud come Heroku, dove backend multipli e che cambiano frequentemente sono responsabili della risposta alle richieste.

Per i sottodomini (come www.example.com) puoi utilizzare i record CNAME che puntano a your-app-name.herokuapp.com. Da lì in poi, Heroku gestisce i record A dinamici dietro in your-app-name.herokuapp.commodo che siano sempre aggiornati. Sfortunatamente, la specifica DNS non consente i record CNAME sull'apice della zona (il dominio di base). (Ad esempio, i record MX si interrompono poiché il CNAME viene seguito per primo fino alla destinazione.)

Tornando ai domini radice, la soluzione semplice e generica è non utilizzarli affatto. Come misura di fallback, alcuni provider DNS offrono di configurare un reindirizzamento HTTP per te. In tal caso, impostalo in modo che example.comsia un reindirizzamento HTTP a www.example.com.

Alcuni provider DNS hanno presentato soluzioni personalizzate che consentono un comportamento simile a CNAME all'apice della zona. A mia conoscenza, abbiamo record di ALIAS di DNSimple e registrare ANAME di DNS Made Easy ; entrambi si comportano in modo simile.

Usandoli, puoi impostare i tuoi record come (usando la notazione zonefile, anche se probabilmente lo farai sulla loro interfaccia utente web):

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

Ricorda che @qui c'è una scorciatoia per il dominio principale ( example.com). Ricorda anche che i punti finali sono importanti, sia nei file di zona che in alcune interfacce utente web.

Guarda anche:

Osservazioni:

  • Anche la Route 53 di Amazon ha un tipo di record ALIAS, ma è piuttosto limitato, in quanto funziona solo per puntare all'interno di AWS. Al momento non consiglierei di usarlo per una configurazione Heroku.

  • Alcune persone confondono i provider DNS con i registrar di nomi di dominio, poiché c'è un po 'di sovrapposizione con le aziende che offrono entrambi. Tieni presente che per trasferire il tuo DNS a uno dei suddetti provider, devi solo aggiornare i record del server dei nomi con il tuo attuale registrar di domini. Non è necessario trasferire la registrazione del dominio.



3
+1 per aver menzionato dnsimple. I loro sforzi per semplificare il lavoro con i fornitori di servizi cloud sono stati un fattore importante nella mia decisione di passare a loro.
Subfuzion

1
@kch conosci un modo per creare un tipo di record DNS che si comporti come l'ALIAS di DNSimple in BIND?
wlf

1
Non credo di poterlo fare. È una funzionalità personalizzata.
kch

2
CloudFlare fornisce anche queste funzionalità attraverso ciò che chiamano appiattimento CNAME . Lo fanno automaticamente per i record CNAME che crei alla radice, ma lo abiliteranno su tutta la tua zona per tutti i record CNAME se ti metti in contatto con loro e lo chiedi.
Adrian Frühwirth

4

Per puntare il tuo dominio apex / root / naked verso un'applicazione ospitata da Heroku, dovrai utilizzare un provider DNS che supporti record simili a CNAME (spesso indicati come record ALIAS o ANAME). Attualmente Heroku consiglia :

Qualunque di quelli che scegli, il tuo record sarà simile al seguente:

Registra: ALIAS oANAME

Nome: vuoto o@

Bersaglio: example.com.herokudns.com.

È tutto ciò di cui hai bisogno.


Tuttavia, non è bene per il SEO risolvere sia la versione www che la versione non www. Uno dovrebbe indicare l'altro come URL canonico. Il modo in cui decidi di farlo dipende dall'utilizzo o meno di HTTPS. E se non lo sei, probabilmente dovresti esserlo perché Heroku ora gestisce i certificati SSL per te automaticamente e gratuitamente per tutte le applicazioni in esecuzione su dynos a pagamento.

Se non stai utilizzando HTTPS, puoi semplicemente impostare un record di reindirizzamento 301 con la maggior parte dei provider DNS che punta il nome wwwa http://example.com.

Se si sta utilizzando HTTPS, sarà più probabile necessità di gestire il reindirizzamento a livello di applicazione. Se vuoi sapere perché, dai un'occhiata a queste spiegazioni brevi e lunghe, ma fondamentalmente poiché il tuo provider DNS o altro servizio di inoltro URL non ha, e non dovrebbe avere, il tuo certificato SSL e la chiave privata, non possono rispondere a HTTPS richieste per il tuo dominio.

Per gestire i reindirizzamenti a livello di applicazione, dovrai:

  • Aggiungi i tuoi nomi host apex e www all'applicazione Heroku ( heroku domains:add example.come heroku domains:add www.example.com)
  • Configura i tuoi certificati SSL
  • Punta il record del tuo dominio Apex su Heroku utilizzando un record ALIAS o ANAME come descritto sopra
  • Aggiungi un record CNAME con il nome che wwwpunta awww.example.com.herokudns.com.
  • E poi nella tua applicazione, 301 reindirizza qualsiasi richiesta www all'URL non www ( ecco un esempio di come farlo in Django)
  • Anche nella tua applicazione, dovresti probabilmente reindirizzare qualsiasi richiesta HTTP a HTTPS (ad esempio, in Django impostato SECURE_SSL_REDIRECTsu True)

Dai un'occhiata a questo post di DNSimple per ulteriori informazioni.


3

Ora utilizzo Google Apps (per la posta elettronica) e Heroku come server web. Sto utilizzando la funzione di reindirizzamento permanente 301 di Google Apps per reindirizzare il dominio vuoto a WWW.tuo_dominio.com

Puoi trovare le istruzioni dettagliate qui https://stackoverflow.com/a/20115583/1440255


2

Non sei autorizzato ad avere un record CNAME per il dominio, poiché CNAME è una funzione di aliasing che copre tutti i tipi di dati (indipendentemente dal fatto che il client cerchi record MX, NS o SOA). Anche i CNAME si riferiscono sempre a un nuovo nome, non a un indirizzo IP, quindi in realtà ci sono due errori nella singola riga

@                        IN CNAME   88.198.38.XXX

Cambiare quel CNAME in un record A dovrebbe farlo funzionare, a condizione che l'indirizzo IP che usi sia quello corretto per la tua app Heroku.

L'unico modo corretto in DNS per far funzionare un semplice domain.comnome nel browser è puntare il dominio a un indirizzo IP con un record A.


Ok ma come posso scoprire il mio IP? Tramite host appname.herokuapp.com/www.domain.com ottengo un IP come questo: 107.20.162.205 (nessuna app Heroku)
mrks

1
Quell'IP è quello da usare. Non puoi testare nel browser con un indirizzo IP, perché Heroku ha bisogno di conoscere il nome dell'app che stai cercando di utilizzare. Basta impostare il record A nel DNS e provare con di, e Heroku vedrà il nome che stai usando e tutto dovrebbe andare bene!
krisku

Ok ma ottengo ogni volta un altro IP dopo "host appname.herokuapp.com".
mrks

2
host app-name.herokuapp.comi risultati sono dinamici. Se li codifichi, la tua app finirà per frenare. Vedi le soluzioni ANAME / CNAME consigliate in un altro commento.
kch

1
Hai bisogno di un server web con un indirizzo IP non modificabile che possa eseguire un reindirizzamento HTTP da dominio.com -> www.dominio.com e puntare dominio.com a quell'indirizzo IP. Quindi puoi fare in modo che un CNAME per www.domain.com punti alla vera app heroku.
krisku
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.