Heroku 是一个云 PaaS,支持多种预配置的编程语言。Heroku 负责处理所有基础设施,使你可以专注于应用程序,而无需在命令行上操作。
本文说明如何将 Heroku 与 Cloudflare 配合配置,以便通过 HTTPS 提供流量。在本文中,我们假设你已有一个在 Cloudflare 上处于活动状态的域名,以及一个正在运行的 Heroku 应用。
请按照 Heroku 的说明操作:Custom Domain Names for Apps ↗。
下方需要为子域名和 apex 域名(也称为“根域名”)添加 DNS 记录。了解如何在 Cloudflare 中管理 DNS 记录。
在 Cloudflare 仪表板中,前往 DNS Records(DNS 记录) page。
Go to Records ↗添加一条 www 的 CNAME 记录,指向你在步骤 1 中为子域名获取的自定义域名(也称为 DNS target)。
| Type | Name | Target | Proxy status |
|---|---|---|---|
CNAME |
www |
{example-domain}.herokudns.com |
Proxied |
在 Heroku 上添加根域名或 apex 域名也需要使用指向根的 CNAME 记录。你无法在 Heroku 上使用 A 记录,因为没有向 Heroku 用户公开可供使用的 IP 地址。
幸运的是,Cloudflare 提供 CNAME flattening,用于解析对根域名的请求。
为根添加一条 CNAME 记录,并指向你在步骤 1 中为域名获取的 DNS target。
| Type | Name | Target | Proxy status |
|---|---|---|---|
CNAME |
@ |
{example-domain}.herokudns.com |
Proxied |
确认 Cloudflare 是否对你的域名生效,最简单的方法是执行 cURL 命令。
curl -I www.example.comHTTP/1.1 200 OK
Date: Tue, 23 Jan 2018 18:51:30 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Cache-Control: public, max-age=0
Last-Modified: Mon, 31 Dec 1979 04:08:00 GMT
X-Powered-By: Express
Server: cloudflare
CF-RAY: 3e1cf1d936f28c52-SFO-DOG你可以通过 CF-Ray 响应标头识别经 Cloudflare 代理的请求。如果出现该标头,则说明请求正由 Cloudflare 相应代理。
你可以对 DNS 设置中已配置的任何子域名重复上述 cURL 命令。
Cloudflare 在所有付费计划中提供 SANs 通配符证书,并在 Free 计划中提供 SNI 通配符证书。有关 SSL 的完整详情可在此找到 ↗。
如果你不清楚这意味着什么,请前往 Cloudflare 仪表板中 SSL/TLS 应用的 Overview(概览) 选项卡。选择 Flexible 模式,以便通过 HTTPS 向所有公共访问者提供你的站点。
证书状态变为 • Active Certificate 后,传入流量将通过 HTTPS 提供给你的站点。访问者将在浏览器地址栏中看到域名以 HTTPS 为前缀。
为确保流向你站点的所有流量均已加密,Cloudflare 允许你强制自动 HTTPS 重定向。要配置此功能,请参阅 Always Use HTTPS。
然后,你可以使用 cURL 命令验证是否所有请求都被强制使用 HTTPS。
curl -I -L example.comHTTP/1.1 301 Moved Permanently
Date: Tue, 23 Jan 2018 23:17:44 GMT
Connection: keep-alive
Cache-Control: max-age=3600
Expires: Wed, 24 Jan 2018 00:17:44 GMT
Location: https://example.com/
Server: cloudflare
CF-RAY: 3e1e77d5c42b8c52-SFO-DOG如果 SSL 对你的域名尚未生效(例如,SSL 证书尚未签发),你将在重定向后看到 525 或 526 HTTP 响应。
请注意,Universal SSL 证书的签发通常最多需要 24 小时。我们的付费 SSL 证书会在 10–15 分钟内签发。