98

我已经在我的 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.com正确www.example.com指向我的 Heroku 应用程序?

4

4 回答 4

148

(注意: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 记录;两者的行为相似。

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

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

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

也可以看看:

评论:

  • Amazon 的 Route 53 也有一个 ALIAS 记录类型,但它有一些限制,因为它只能指向 AWS 内部。目前,我不建议将其用于 Heroku 设置。

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

于 2013-04-16T15:56:56.077 回答
4

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

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

记录: ALIASANAME

名称:空或@

目标: example.com.herokudns.com.

这就是你所需要的。


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

如果您不使用 HTTPS,则只需设置一个 301 重定向记录,大多数 DNS 提供商将名称www指向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
  • 添加名称www指向的 CNAME 记录www.example.com.herokudns.com.
  • 然后在您的应用程序中,301 将任何 www 请求重定向到非 www URL(这里是如何在 Django 中执行此操作的示例)
  • 同样在您的应用程序中,您可能应该将任何 HTTP 请求重定向到 HTTPS(例如,在 Django 中设置SECURE_SSL_REDIRECTTrue

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

于 2017-09-15T08:10:03.823 回答
3

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

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

于 2013-11-21T08:16:43.270 回答
2

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

@                        IN CNAME   88.198.38.XXX

将该 CNAME 更改为 A 记录应该可以使其正常工作,前提是您使用的 ip 地址是 Heroku 应用程序的正确地址。

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

于 2013-04-16T08:45:50.240 回答