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

时间:2013-04-15 18:32:44

标签: 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       ; 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应用程序?

4 个答案:

答案 0 :(得分:138)

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

传统上,要指向您的顶点域,您将使用指向服务器IP的A记录。此解决方案无法扩展,并且不适用于像Heroku这样的云平台,其中多个且经常变化的后端负责响应请求。

对于子域名(例如www.example.com),您可以使用指向your-app-name.herokuapp.com的CNAME记录。从那时起,Heroku管理your-app-name.herokuapp.com后面的动态A记录,以便它们始终保持最新状态。遗憾的是,DNS规范不允许区域顶点(基本域)上的CNAME记录。 (例如,MX记录会因CNAME首先跟随其目标而中断。)

回到根域,简单而通用的解决方案是根本不使用它们。作为后备措施,一些DNS提供商会为您设置HTTP重定向。在这种情况下,请对其进行设置,以便example.com是HTTP重定向到www.example.com

一些DNS提供商已经提出了自定义解决方案,允许在区域顶点上执行类似CNAME的行为。据我所知,我们有DNSimple's ALIAS recordDNS Made Easy's ANAME record;两者表现相似。

使用这些,您可以将记录设置为(使用区域文件表示法,即使您可能在他们的Web用户界面上执行此操作):

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

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

另见:

说明:

  • 亚马逊的Route 53也有一个ALIAS记录类型,但它有点受限,因为它只适用于AWS。目前我不建议将其用于Heroku设置。

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

答案 1 :(得分:3)

我现在使用Google Apps(电子邮件)和Heroku作为网络服务器。我正在使用Google Apps 301永久重定向功能将裸域重定向到WWW.your_domain.com

您可以在此处找到分步说明 https://stackoverflow.com/a/20115583/1440255

答案 2 :(得分:2)

您不能拥有域的CNAME记录,因为CNAME是一种覆盖所有数据类型的别名功能(无论客户端是查找MX,NS还是SOA记录)。 CNAME也总是引用新名称,而不是ip地址,因此单行中实际上有两个错误

@                        IN CNAME   88.198.38.XXX

如果您使用的IP地址是Heroku应用程序的正确地址,则将该CNAME更改为A记录应该可以正常工作。

DNS在浏览器中使用简单domain.com名称的唯一正确方法是将域指向带有A记录的IP地址。

答案 3 :(得分:2)

要将您的apex / root / naked域指向Heroku托管的应用程序,您需要使用支持CNAME类记录的DNS提供程序(通常称为ALIAS或ANAME记录)。目前Heroku recommends

无论您选择哪种,您的记录都将如下所示:

记录: ALIASANAME

姓名:为空或@

目标: example.com.herokudns.com.

这就是你所需要的一切。

然而,同时拥有www版本和非www版本的not good for SEO。人们应该将另一个指向规范URL。您决定如何做到这一点取决于您是否使用HTTPS。如果你不是,那么你现在应该自动成为Heroku handles SSL certificates for you,并且可以免费使用付费dynos上运行的所有应用程序。

如果您不使用HTTPS,则可以设置301重定向记录,其中大多数DNS提供商将名称www指向http://example.com

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

要在应用程序级别处理重定向,您需要:

  • 将您的apex和www主机名添加到Heroku应用程序(heroku domains:add example.comheroku domains:add www.example.com
  • Set up your SSL certificates
  • 使用如上所述的ALIAS或ANAME记录将您的顶级域记录指向Heroku
  • 添加名为www的CNAME记录,指向www.example.com.herokudns.com.
  • 然后在您的应用程序中,301将任何www请求重定向到非www URL(here's an example如何在Django中执行此操作)
  • 同样在您的应用程序中,您可能应该将任何HTTP请求重定向到HTTPS(例如,in DjangoSECURE_SSL_REDIRECT设置为True

从DNSimple中查看this post了解更多信息。