如何设置指向Heroku应用程序的顶级域名(无www)的DNS?

我已经添加了一个自定义域到我的heroku应用程序,它可以与www.domain.com。

我需要知道如何设置没有“www”的域来parsing到应用程序。

这是我目前的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 

我必须使用哪些正确的设置才能使example.comwww.example.com正确指向我的Heroku应用程序?

(注意:root,base,apex域都是一样的,可以互换使用google-foo。)

传统上,为了指出您的apex域名,您将使用指向您服务器IP的Alogging。 这个解决scheme不能扩展,对Heroku这样的云平台来说是不可行的,因为在这个云平台中,多个频繁变化的后端负责响应请求。

对于子域名(例如www.example.com ),您可以使用指向您的应用程序your-app-name.herokuapp.com CNAMElogging。 从那里开始,Herokupipe理您的应用程序名称后面的dynamicAlogging,以便它们始终保持最新状态。 不幸的是,DNS规范不允许区域顶点(基本域)上的CNAMElogging。 (例如,MXlogging会因为CNAME将首先被追踪到目标而中断)。

回到根域,简单而通用的解决scheme是根本不使用它们。 作为回退措施,一些DNS提供商提供为您设置HTTPredirect。 在这种情况下,请将example.com为HTTPredirect至www.example.com

一些DNS提供商提出了自定义解决scheme,允许在区域顶点上类似CNAME的行为。 据我所知,我们有DNSimple的ALIASlogging和DNS Made Easy的ANAMElogging ; 两者performance相似。

使用这些,你可以设置你的logging(使用区域文件符号,甚至你可能会在他们的Web用户界面上做到这一点):

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

请记住@这里是根域( example.com )的缩写。 另外请注意,尾随点在区域文件和一些Web用户界面中都很重要。

也可以看看:

  • 用Heroku做DNS的权利
  • 避免裸露的域名和DNS Alogging

备注:

  • 亚马逊的Route 53也有一个ALIASloggingtypes,但它有一定的局限性,因为它只能在AWS中指向。 目前我不会推荐使用这个Heroku设置。

  • 有些人将DNS提供商与域名注册商混淆,因为与提供两者的公司有一些重叠。 请注意,要将您的DNS切换到上述提供商之一,您只需要使用您当前的域名注册商更新您的域名服务器logging。 你不需要转移你的域名注册。

我现在使用Google Apps(用于电子邮件)和Heroku作为Web服务器。 我正在使用Google Apps 301永久redirectfunction将裸域redirect到WWW.your_domain.com

您可以在这里find分步说明https://stackoverflow.com/a/20115583/1440255

由于CNAME是覆盖所有数据types的别名function(无论客户端是查找MX,NS还是SOAlogging),因此不允许为该域loggingCNAMElogging。 CNAME也总是引用一个新的名字,而不是一个IP地址,所以在单行中实际上有两个错误

 @ IN CNAME 88.198.38.XXX 

只要您使用的IP地址是Heroku应用程序的正确地址,那么将该CNAME更改为Alogging应该可以正常工作。

在DNS中唯一正确的方法是在浏览器中使用一个简单的domain.com名称,方法是将该域指向具有Alogging的IP地址。

要在Heroku托pipe的应用程序中指向apex / root / naked域,您需要使用支持类似CNAME的logging(通常称为ALIAS或ANAMElogging)的DNS提供程序。 目前Heroku build议 :

  • ALIAS在DNSimple
  • DNS的简易名称
  • easyDNS的ANAME
  • ALDAS在PointDNS
  • CloudFlare的CNAME

无论您select哪一个,您的logging将如下所示:

logging: ALIASANAME

名称:空或@

目标: example.com.herokudns.com.

这就是你所需要的。


然而,这对search引擎优化不好,因为www版本和非www版本都解决了。 一个应该指向另一个作为规范的URL。 如何决定如何使用HTTPS取决于您是否使用HTTPS。 如果你不是这样的话,那么你可能应该像Heroku现在自动为所有在付费dynos上运行的应用程序那样处理SSL证书 。

如果你不使用HTTPS,你可以设置一个301redirectlogging,其中大多数DNS提供者将www名称指向http://example.com

如果您使用HTTPS,则很可能需要在应用程序级别处理redirect。 如果您想知道为什么,请查看这些短期和长期的解释,但基本上,因为您的DNS提供商或其他URL转发服务没有,也不应该有您的SSL证书和私钥,他们无法响应HTTPS请求您的域名。

要在应用程序级别处理redirect,您需要:

  • 将您的apex和www主机名添加到Heroku应用程序( heroku domains:add example.comheroku domains:add www.example.com
  • 设置您的SSL证书
  • 如上所述,使用ALIAS或ANAMElogging将您的apex域logging指向Heroku
  • 添加名为www的CNAMElogging,指向www.example.com.herokudns.com.
  • 然后在您的应用程序中,301将任何www请求redirect到非www URL( 这里是一个如何在Django中执行的例子 )
  • 同样在你的应用程序中,你也许应该把任何HTTP请求redirect到HTTPS(例如, 在Django中将SECURE_SSL_REDIRECT设置为True

看看这个post从DNSimple更多。