如何设置指向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.com
和www.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: ALIAS
或ANAME
名称:空或@
目标: 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.com
和heroku 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更多。