![裸域上的 Heroku 应用程序错误](https://linux22.com/image/622287/%E8%A3%B8%E5%9F%9F%E4%B8%8A%E7%9A%84%20Heroku%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E9%94%99%E8%AF%AF.png)
我遵循了一些建议,将域名指向 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 将被忽略。
在这种情况下解决该问题的唯一方法是:
- 将根域重定向到 www 主机名(将根域的 A 记录指向重定向服务)
- 使用允许对根域进行类似 CNAME 配置的 DNS 提供商(通过动态解析并将 A 记录分配给根域)
- 将 A 记录指向您的 Heroku 应用程序名称返回的 A 记录之一(不推荐,因为它们可能会更改)。