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

mrk*_*rks 92 dns heroku

我已经在我的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
Run Code Online (Sandbox Code Playgroud)

什么是正确的设置,我不得不使用这样既www.domain.comwww将正确地指向我的Heroku应用程序?

kch*_*kch 138

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

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

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

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

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

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

@   IN ALIAS your-app-name.herokuapp.com.
www IN CNAME your-app-name.herokuapp.com.
Run Code Online (Sandbox Code Playgroud)

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

也可以看看:

备注:

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

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

  • +1提及dnsimple.他们努力使云提供商更容易合作是我决定转用它们的一个重要因素. (3认同)
  • CloudFlare还通过他们所谓的[CNAME展平]提供此功能(https://support.cloudflare.com/hc/en-us/articles/200169056-CNAME-Flattening-RFC-compliant-support-for-CNAME-at-根).他们会自动为您在根目录下创建的CNAME记录执行此操作,但如果您与他们取得联系并要求,则他们会在整个区域为所有CNAME记录启用它. (2认同)

Jef*_*wen 5

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

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

记录: ALIASANAME

名称:空或@

目标: example.com.herokudns.com.

这就是你所需要的。


但是同时解析www版本和非www版本对SEO来说并不好。一个应该指向另一个作为规范 URL。您决定如何执行此操作取决于您是否使用 HTTPS。如果您不是,您可能应该这样做,因为 Heroku 现在会自动为您处理 SSL 证书,并且对于在付费测功机上运行的所有应用程序免费。

如果您不使用 HTTPS,则只需设置 301 重定向记录,大多数 DNS 提供商将 namewww指向http://example.com.

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

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

  • 将您的 apex 和 www 主机名添加到 Heroku 应用程序 (heroku domains:add example.comheroku domains:add www.example.com)
  • 设置您的 SSL 证书
  • 如上所述,使用 ALIAS 或 ANAME 记录将您的顶级域记录指向 Heroku
  • 添加一条 CNAME 记录,名称www指向www.example.com.herokudns.com.
  • 然后在您的应用程序中,301 将任何 www 请求重定向到非 www URL(以下是如何在 Django 中执行此操作的示例)
  • 同样在您的应用程序中,您可能应该将任何 HTTP 请求重定向到 HTTPS(例如,在 Django 中设置SECURE_SSL_REDIRECTTrue

查看DNSimple 的这篇文章了解更多信息。