我正在尝试使用 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 certs:auto
返回:
Domain Status
─────────────── ────────────
example.com Failing
www.example.com OK
我承认我对有关域,DNS等的设置很文盲。因此,从我的角度来看,这可能是一个非常简单的错误。但是,我阅读了 Heroku 故障排除文档以及 SO 中的类似问题,例如这个或这个,但仍然不知道出了什么问题。
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上找到了以下票:
问题
用户在指向其根域(也称为顶点)时遇到问题 域/裸域)到他们的 Heroku 应用程序,要么通过设置 正确的 DNS 记录,或通过 HTTPS 访问它。
分辨率
Heroku 上的根域需要使用"类似 CNAME"的记录,通常 称为别名或 ANAME 记录。
不幸的是,许多流行的DNS主机,例如GoDaddy, Namecheap,Bluehost和其他公司不支持这些类型的记录。 相反,他们倾向于提供以下内容:
A 记录
网址重定向/转发
这两个选项都有注意事项...
令人惊讶的是,我没有找到任何清楚地解释所有步骤的地方。到目前为止,我所做的是:
- 使用支持此功能的 DNS 主机开立帐户。我参加了 DNSimple。在撰写本文时,价格从每月5欧元起,但有一个免费试用月。
- 转移域名的费用为14欧元/年,所以我只是将Namecheap的名称服务器指向DNSimple,并将域名添加到DNSimple以创建DNS记录。
然后是DNSimple上的配置。我按照文档中的步骤 1 将 HTTP 重定向到 HTTP;忽略了第 2 步,因为 Heroku 的 ACM 已经完成了;对于第 3 步,文章将域顶点指向 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小时后仍然失败...
供将来参考:在联系 Heroku 支持后,他们手动刷新了我的证书请求,最终为我的应用程序颁发了证书请求......
在这里查看答案,尤其是CloudFlare解决方案,因为它是免费的
自动证书管理还为您提供免费的 SSL 证书 从HTTPS无处不在。您无需购买证书。
但是namecheap不适用于ACM,因为它们不允许 您的"顶点"域的"别名"记录,即您的域没有 子域,所以 https://example.com 不 https://www.example.com
您的选项是切换到支持"别名"的 DNS 注册商 记录,如 dnsimple。除了 域名注册费。
或者使用SSL附带的免费cloudflare实例。
如果您已经购买了证书,则可以通过以下方式将其上传到Heroku 一个 SSL 插件。
我在某些应用程序上使用DNSimple/Heroku ACM,在某些应用程序上使用cloudflare。 别人。两者都同样不错,但 cloudflare 是免费的,并为您提供 CDN也是。
https://www.reddit.com/r/Heroku/comments/7wh5r4/setting_up_ssl_with_heroku_namecheap/