¿Cómo configuro DNS para un dominio apex (sin www) que apunta a una aplicación Heroku?

97

Ya agregué un dominio personalizado a mi aplicación Heroku y funciona con www.domain.com.

Necesito saber cómo configurar el dominio sin wwwresolver también la aplicación.

Aquí está mi configuración de DNS actual:

$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

¿Cuáles son los ajustes correctos para utilizar de modo que tanto example.comy www.example.comapuntaría correctamente a mi Heroku aplicación?

mrks
fuente
Por cierto, parece que la configuración de ftp / pop / smtp está mal, ya que apunta a www, que apunta a heroku, que no usa ftp / pop / smtp.
kch
Otra solución stackoverflow.com/a/11494197/176877
Chris Moschini

Respuestas:

145

(Nota: los dominios raíz, base y ápice son todos iguales. Se usan indistintamente para google-foo).

Tradicionalmente, para apuntar su dominio ápice, usaría un registro A que apunta a la IP de su servidor. Esta solución no se escala y no es viable para una plataforma en la nube como Heroku, donde varios backends que cambian con frecuencia son responsables de responder a las solicitudes.

Para subdominios (como www.example.com), puede usar registros CNAME que apunten a your-app-name.herokuapp.com. A partir de ahí, Heroku gestiona los registros dinámicos A detrás your-app-name.herokuapp.compara que estén siempre actualizados. Desafortunadamente, la especificación DNS no permite registros CNAME en el ápice de la zona (el dominio base). (Por ejemplo, los registros MX se romperían ya que el CNAME se seguiría primero hasta su destino).

Volviendo a los dominios raíz, la solución simple y genérica es no usarlos en absoluto. Como medida alternativa, algunos proveedores de DNS ofrecen configurar un redireccionamiento HTTP por usted. En ese caso, configúrelo para que example.comsea ​​un redireccionamiento HTTP a www.example.com.

Algunos proveedores de DNS han presentado soluciones personalizadas que permiten un comportamiento similar a CNAME en el vértice de la zona. Que yo sepa, no tenemos registro de alias de DNSimple y registro ANAME de DNS Made Easy ; ambos se comportan de manera similar.

Con ellos, puede configurar sus registros como (usando la notación de archivo de zona, aunque probablemente lo haga en su interfaz de usuario web):

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

Recuerde que @aquí hay una abreviatura para el dominio raíz ( example.com). También tenga en cuenta que los puntos finales son importantes, tanto en los archivos de zona como en algunas interfaces de usuario web.

Ver también:

Observaciones:

  • La Route 53 de Amazon también tiene un tipo de registro ALIAS, pero es algo limitado, ya que solo funciona para apuntar dentro de AWS. Por el momento, no recomendaría usar esto para una configuración de Heroku.

  • Algunas personas confunden a los proveedores de DNS con los registradores de nombres de dominio, ya que existe cierta superposición con las empresas que ofrecen ambos. Tenga en cuenta que para cambiar su DNS a uno de los proveedores antes mencionados, solo necesita actualizar los registros de su servidor de nombres con su registrador de dominio actual. No es necesario transferir el registro de su dominio.

kch
fuente
1
Además, vea el Centro de desarrollo de Heroku
Jon Mountjoy
3
+1 por mencionar dnsimple. Sus esfuerzos para facilitar el trabajo con los proveedores de la nube fueron un factor importante en mi decisión de cambiarme a ellos.
Subfuzion
1
@kch, ¿conoce alguna forma de que pueda crear un tipo de registro DNS que se comporte como ALIAS de DNSimple en BIND?
wlf
1
No creo que pueda. Es una función personalizada.
kch
2
CloudFlare también proporciona estas funciones a través de lo que llaman acoplo de CNAME . Lo hacen automáticamente para los registros CNAME que crea en la raíz, pero lo habilitarán en toda su zona para todos los registros CNAME si se comunica con ellos y los solicita.
Adrian Frühwirth
4

Para apuntar su dominio ápice / raíz / desnudo a una aplicación alojada en Heroku, deberá utilizar un proveedor de DNS que admita registros similares a CNAME (a menudo denominados registros ALIAS o ANAME). Actualmente Heroku recomienda :

Cualquiera de los que elija, su registro tendrá el siguiente aspecto:

Grabar: ALIAS oANAME

Nombre: vacío o@

Objetivo: example.com.herokudns.com.

Eso es todo lo que necesitas.


Sin embargo, no es bueno para SEO tener resueltas tanto la versión con www como la versión sin www. Uno debe apuntar al otro como la URL canónica. La forma en que decida hacerlo depende de si está usando HTTPS o no. Y si no es así, probablemente debería estarlo, ya que Heroku ahora maneja certificados SSL automáticamente y de forma gratuita para todas las aplicaciones que se ejecutan en dynos pagados.

Si usted no está utilizando HTTPS, sólo puede configurar un registro 301 de redireccionamiento con la mayoría de los proveedores de DNS que señalan el nombre wwwa http://example.com.

Si está utilizando HTTPS, lo más probable es que deba manejar la redirección en el nivel de la aplicación. Si desea saber por qué, consulte estas explicaciones cortas y largas , pero básicamente dado que su proveedor de DNS u otro servicio de reenvío de URL no tiene, y no debería tener, su certificado SSL y clave privada, no pueden responder a HTTPS. solicitudes de su dominio.

Para manejar los redireccionamientos a nivel de la aplicación, deberá:

  • Agregue sus nombres de host apex y www a la aplicación Heroku ( heroku domains:add example.comy heroku domains:add www.example.com)
  • Configura tus certificados SSL
  • Apunte su registro de dominio ápice a Heroku usando un registro ALIAS o ANAME como se describe arriba
  • Agregue un registro CNAME con el nombre wwwapuntando awww.example.com.herokudns.com.
  • Y luego, en su aplicación, 301 redirige cualquier solicitud www a la URL que no es www ( aquí hay un ejemplo de cómo hacerlo en Django)
  • También en su aplicación, probablemente debería redirigir cualquier solicitud HTTP a HTTPS (por ejemplo, en Django configurado SECURE_SSL_REDIRECTen True)

Consulte esta publicación de DNSimple para obtener más información.

Jeff Bowen
fuente
3

Ahora estoy usando Google Apps (para correo electrónico) y Heroku como servidor web. Estoy usando la función de redireccionamiento permanente 301 de Google Apps para redirigir el dominio simple a WWW.your_domain.com

Puede encontrar las instrucciones paso a paso aquí https://stackoverflow.com/a/20115583/1440255

Leo Tulipan
fuente
2

No se le permite tener un registro CNAME para el dominio, ya que CNAME es una función de alias que cubre todos los tipos de datos (independientemente de si el cliente busca registros MX, NS o SOA). Los CNAME también siempre se refieren a un nuevo nombre, no a una dirección IP, por lo que en realidad hay dos errores en una sola línea

@                        IN CNAME   88.198.38.XXX

Cambiar ese CNAME a un registro A debería hacer que funcione, siempre que la dirección IP que use sea la correcta para su aplicación Heroku.

La única forma correcta en DNS de hacer que un domain.comnombre simple funcione en el navegador es apuntar el dominio a una dirección IP con un registro A.

krisku
fuente
Ok, pero ¿cómo puedo averiguar mi IP? A través de host appname.herokuapp.com/www.domain.com acabo de obtener una IP como esa: 107.20.162.205 (No existe tal aplicación Heroku)
mrks
1
Esa IP es la que se debe usar. Simplemente no puede probar en el navegador con una dirección IP, porque Heroku necesita saber el nombre de la aplicación que está intentando usar. Simplemente configure el registro A en DNS y pruebe con que, y Heroku verá el nombre que está usando y todo debería estar bien.
krisku
Ok, pero cada vez obtengo otra IP después de "host appname.herokuapp.com".
mrks
2
host app-name.herokuapp.comlos resultados son dinámicos. Si los codifica, su aplicación eventualmente se frenará. Consulte las soluciones ANAME / CNAME recomendadas en otro comentario.
kch
1
Necesita un servidor web con una dirección IP que no cambie y que pueda realizar una redirección HTTP desde dominio.com -> www.dominio.com, y apunte dominio.com a esa dirección IP. Entonces puede hacer que un CNAME para www.domain.com apunte a la aplicación heroku real.
krisku