在Heroku上使用自定义根域名

12
我有一个域名example.com,想将其用于托管在example.herokuapp.com上的我的rails应用程序,但我很困惑如何实现。 Heroku说 “区域顶级域(也称为“naked”,“bare”或“root”域),例如example.com,使用传统的DNS A记录,在Heroku上不受支持。” 然后他们继续解释解决方法(使用ALIAS或ANAME)。
我花了一个小时阅读这个主题(在SO和其他地方),但仍然无法理解。
是否有任何替代方法或说明如何“为虚拟用户”完成此操作?
3个回答

31

我会尝试回答这个经常被问到的问题。

假设您拥有一个域名example.com并想使用www.example.com来托管您的站点。在传统的托管中,您可能会拥有一个虚拟服务器,该服务器被分配了一个IP地址,在这种情况下,您需要在DNS控制面板中使用主机记录(也称为A记录)将www.example.com映射到IP地址。在这种情况下,由于您现在已将www.example.com设置为固定的IP地址,如果该IP地址发生变化,您将需要自己更新DNS。

另外,在传统的托管中,您可以将example.com设置为相同的IP地址,因此www.example.com和example.com都适用于裸域名。

那什么是CNAME记录呢?与将记录映射到IP地址不同,CNAME记录将记录映射到另一个DNS条目。因此,将www.example CNAME'D到example.herokuapp.com意味着Heroku可以并且可能会移动example.herokuapp.com指向的位置,但您无需更新任何内容,因为您正在使用CNAME记录,而Heroku正在管理example.herokuapp.com指向的位置(这可能是另一个CNAME或IP地址)。 CNAME记录的问题在于它们无法指向IP地址,这对于www.example.com来说很好,但是对于example.com来说却是个问题。Heroku以前发布了用于裸域名的IP地址,但当它们遭受DDOS攻击并且无法用新IP替换这些IP时,问题就出现了,因为它们是已发布的IP地址。 对于新的欧盟区域,Heroku不会发布用于裸域名的IP地址。

一些DNS提供商(我知道DNSsimple是其中之一)添加了自己的别名记录到其DNS服务器中,以允许您在裸域名上使用CNAME,因此www.example.com和example.com都将像Heroku所支持的那样工作。如果您的DNS提供商不支持ALIAS记录,则值得将域名移动到支持它的DNS提供商。 DNSsimple还支持重定向记录,因此您可以在DNS提供商级别上将www.example.com重定向到example.com而不是在应用程序层面上进行操作。


MediaTemple没有将其称为什么特别的名称,只需为www和根记录选择CNAME。 - Michael J. Calkins
1
如果您在MediaTemple上为根域使用CNAME,则根域上的MX记录将不再起作用,换句话说,您将无法收到任何电子邮件。 - Thomas Walther

3

值得一提的是,CloudFlare现在支持CNAME扁平化,将CNAME呈现为A记录。https://support.cloudflare.com/hc/en-us/articles/200169056-CNAME-Flattening-RFC-compliant-support-for-CNAME-at-the-root - Simone

-3

如果您查看DNS记录规范,您将找不到ANAME记录。

解决此问题的最佳方法是: 为www子域名创建CNAME条目,指向您的Heroku应用程序,并为根域名创建指向www子域名的CNAME记录。

  • www.domain.com. 3600 IN CNAME app.herokuapp.com.
  • @ 3600 IN CNAME www.domain.com.

P.S. 它有效,并且不会让您浪费金钱购买神秘的DNS记录。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接