裸域上的 Heroku 应用程序错误

裸域上的 Heroku 应用程序错误

我遵循了一些建议,将域名指向 Heroku 应用程序。我谈论的帖子可以在这里这里。我从命令行将自定义域添加到我的应用程序

$ heroku domains:add www.myapp.com
$ heroku domains:add myapp.com

然后我在 Gandi Zones 中添加了这些配置

@ 300 IN A 174.129.212.2
@ 300 IN A 75.101.145.87
@ 300 IN A 75.101.163.44
imap 300 IN CNAME access.mail.gandi.net.
pop 300 IN CNAME access.mail.gandi.net.
smtp 300 IN CNAME relay.mail.gandi.net.
webmail 300 IN CNAME agent.mail.gandi.net.
www 300 IN CNAME myapp.herokuapp.com.
@ 300 IN MX 50 fb.mail.gandi.net.
@ 300 IN MX 10 spool.mail.gandi.net.

一切正常http://www.myapp.com,但在裸域上http://myapp.com我得到了应用程序错误来自 Heroku。

如何解决这个问题呢?

答案1

如果您的 DNS 提供商允许,您应该使用 CNAME 将裸域(“@”)设置为您的应用的别名。

@ 300 IN CNAME myname.herokuapp.com.

Cloudflare 允许这样做,但并非所有 DNS 提供商都允许这样做,因为这显然不符合规范。Heroku 依赖它。使用 Heroku IP 作为 A 记录已被弃用,并且可能会导致问题。

答案2

不要那样做。根据 DNS 规范,CNAME 记录不能与任何其他 DNS 类型共存,这就是为什么 CNAME 通常不允许用于根域的原因。

使用 CNAME 会阻止任何其他 DNS 记录正常工作,例如,排除为您的域配置 MX 记录的可能性,从而阻止您接收该域的电子邮件。

您也无法正确发送电子邮件,因为 TXT 和 SPF 将被忽略。

在这种情况下解决该问题的唯一方法是:

  1. 将根域重定向到 www 主机名(将根域的 A 记录指向重定向服务)
  2. 使用允许对根域进行类似 CNAME 配置的 DNS 提供商(通过动态解析并将 A 记录分配给根域)
  3. 将 A 记录指向您的 Heroku 应用程序名称返回的 A 记录之一(不推荐,因为它们可能会更改)。

相关内容