如何为指向Heroku应用程序的apex域(无www)设置DNS?
我已经在Heroku应用程序中添加了一个自定义域,它可以与如何为指向Heroku应用程序的apex域(无www)设置DNS?,heroku,dns,Heroku,Dns,我已经在Heroku应用程序中添加了一个自定义域,它可以与www.domain.com一起使用 我需要知道如何在不使用www的情况下设置域来解析应用程序 以下是我当前的DNS设置: $TTL 86400 @ IN SOA ns1.first-ns.de. postmaster.robot.first-ns.de. ( 2013041500 ; serial 14400 ; refresh 1800 ; retry 604800
www.domain.com
一起使用
我需要知道如何在不使用www
的情况下设置域来解析应用程序
以下是我当前的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应用程序?您不允许拥有域的CNAME记录,因为CNAME是一种覆盖所有数据类型的别名功能(无论客户端是查找MX、NS还是SOA记录)。CNAMEs也总是引用一个新名称,而不是ip地址,因此在一行中实际上有两个错误
@ IN CNAME 88.198.38.XXX
如果您使用的ip地址是Heroku应用程序的正确ip地址,将该CNAME更改为A记录应该可以使其正常工作
在DNS中,使一个简单的domain.com
名称在浏览器中工作的唯一正确方法是将域指向具有a记录的IP地址 (注意:根域、基域和顶点域都是相同的。可替换地用于GoogleFoo。)
传统上,要指向apex域,您需要使用指向服务器IP的A记录。此解决方案不可扩展,对于Heroku这样的云平台来说也不可行,因为在Heroku中,多个且经常变化的后端负责响应请求
对于子域(如www.example.com
),您可以使用指向您的app name.herokuapp.com
的CNAME记录。从那以后,Heroku将管理你的app name.herokuapp.com
后面的动态A记录,以便它们始终是最新的。不幸的是,DNS规范不允许在区域顶点(基本域)上记录CNAME。(例如,MX记录将中断,因为CNAME将首先被跟踪到其目标。)
回到根域,简单而通用的解决方案是根本不使用它们。作为备用措施,一些DNS提供商提供为您设置HTTP重定向。在这种情况下,将其设置为example.com
是HTTP重定向到www.example.com
一些DNS提供商提出了自定义解决方案,允许在区域顶点上进行类似CNAME的行为。据我所知,我们有和;两者行为相似
使用这些,您可以将记录设置为(使用zonefile表示法,即使您可能会在其web用户界面上这样做):
记住@
这里是根域(example.com
)的缩写。还请注意,尾随点在分区文件和某些web用户界面中都很重要
另见:
- 亚马逊的Route 53也有一个别名记录类型,但它有一定的局限性,因为它只适用于AWS中的点。目前,我不建议在Heroku设置中使用此选项
- 有些人把DNS提供商和域名注册商混为一谈,因为两者都有一些重叠。请注意,要将DNS切换到上述提供商之一,只需使用当前域注册器更新名称服务器记录。您不需要转移您的域注册
要将apex/root/裸域指向Heroku托管的应用程序,您需要使用支持类似CNAME记录(通常称为别名或ANAME记录)的DNS提供商。目前Heroku:
别名
或名称
名称:为空或@
目标:example.com.herokudns.com.
这就是你所需要的
但是,它需要同时具有www版本和非www版本解析。一个应该指向另一个作为规范URL。您如何决定这样做取决于您是否使用HTTPS。如果你不是,你现在可能应该像Heroku一样,自动地、免费地为所有在付费dynos上运行的应用程序提供服务 如果您不使用HTTPS,您可以设置一个301重定向记录,大多数DNS提供商将name
www
指向http://example.com
如果您使用的是HTTPS,则很可能需要在应用程序级别处理重定向。如果您想知道原因,请查看以下内容和说明,但基本上,由于您的DNS提供商或其他URL转发服务没有、也不应该有您的SSL证书和私钥,它们无法响应您域的HTTPS请求
要在应用程序级别处理重定向,您需要:
- 将apex和www主机名添加到Heroku应用程序中(
和Heroku域:Add example.com
)Heroku域:Add www.example.com
- 如上所述,使用别名或ANAME记录将apex域记录指向Heroku
- 添加名为
指向www
www.example.com.herokudns.com的CNAME记录。
- 然后在应用程序中,301将所有www请求重定向到非www URL(在Django中如何实现)
- 同样在应用程序中,您可能应该将所有HTTP请求重定向到HTTPS(例如,将
设置为安全\u SSL\u重定向
)真
从DNSimple查看更多信息。好的,但我如何才能找到我的IP?通过主机appname.herokuapp.com/www.domain.com,我只得到了这样一个IP:107.20.162.205(没有这样的Heroku应用程序),IP就是要使用的IP。你不能用t测试
@ IN ALIAS your-app-name.herokuapp.com.
www IN CNAME your-app-name.herokuapp.com.