我正在尝试使用 Heroku 为我的应用程序获得 SSL 认证,但是自动证书管理对于两个域名之一都失败了。
我在 2017 年 3 月之前创建了测功机,所以我必须按照此处heroku certs:auto:enable
的说明运行。
然后,heroku domains
返回:
Domain Name DNS Record Type DNS Target
─────────────── ─────────────── ─────────────────────────────
example.com ALIAS or ANAME example.com.herokudns.com
www.example.com CNAME www.example.com.herokudns.com
这似乎符合heroku 的预期。
无论如何,heroku certs:auto
返回:
Domain Status
─────────────── ────────────
example.com Failing
www.example.com OK
我承认我对有关域、DNS 等的设置非常不识字。因此,从我的角度来看,这可能是一个非常简单的错误。但是,我阅读了Heroku 故障排除文档以及 SO 中的类似问题,例如this one或this one,但仍然不知道出了什么问题。
www.example.com
没关系但失败的事实让example.com
我更加困惑。不幸的是,我收到了一封没有失败原因的通知电子邮件。
名不虚传
我想问题出在 Heroku 或我购买域名的地方。那就是 Namecheap.com。
在那里,在Domain
标签上我有:
NAMESERVERS Namecheap BasicDNS
REDIRECT DOMAIN Source URL Destination
example.com http://www.example.com
在Advanced DNS
选项卡上:
Type Host Value TTL
------------- ----- ------------------------------- -------
CNAME Record www example.com.herokudns.com Automatic
TXT Record @ google-site-verification... Automatic
URL Redirect Record @ http://www.example.com/ Unmasked
我究竟做错了什么?
更新
这个问题似乎是由于 Namecheap 造成的。我在 Heroku 上找到了以下票:
问题
用户无法通过设置正确的 DNS 记录或通过 HTTPS 访问其根域(也称为顶点域/裸域)指向 Heroku 应用程序。
解析度
Heroku 上的根域需要使用“类似 CNAME”的记录,通常称为 ALIAS 或 ANAME 记录。
不幸的是,GoDaddy、Namecheap、Bluehost 等许多流行的 DNS 主机不支持这些类型的记录。相反,他们倾向于提供以下内容:
一个记录
URL 重定向/转发
这两种选择都有一些警告......
令人惊讶的是,我没有找到所有步骤都解释清楚的地方。到目前为止我所做的是:
- 使用支持此功能的 DNS 主机开设一个帐户。我拿了 DNSimple。在撰写本文时,价格从 5 欧元/月开始,但有一个免费试用月。
- 转移域的费用为 14 欧元/年,所以我只是将 Namecheap 的名称服务器指向 DNSimple,并将域添加到 DNSimple 以创建 DNS 记录。
然后是 DNSimple 上的配置。我按照文档中的步骤 1将 HTTP 重定向到 HTTPS;忽略第 2 步,因为 Heroku 的 ACM 已经完成了;对于第 3 步,将 Domain Apex 指向 Heroku的文章非常有帮助。我手动添加了一个
ALIAS record
,还添加了一条CNAME
记录,如下所示:Type Name Content ───── ─────────────── ─────────────────────── ALIAS example.commyapp.com.herokudns.com CNAME www.example.commyapp.com.herokudns.com
一开始没有任何工作,浏览器显示以下错误:
无法访问此站点
找不到 www.example.com 的服务器 IP 地址。
检查故障排除文档我发现唯一的可能性是Name server propagation delay
,所以我等待。感觉时间很长,但实际上不到一个小时,网站就重新上线了。
但是,SSL 认证在 48 小时后仍然失败......