跳转到内容
搜索文档

通过 HTTPS 配置 Cloudflare 与 Heroku

最后更新 查看 MarkdownAgent 设置

概览

Heroku 是一个云 PaaS,支持多种预配置的编程语言。Heroku 负责处理所有基础设施,使你可以专注于应用程序,而无需在命令行上操作。

本文说明如何将 Heroku 与 Cloudflare 配合配置,以便通过 HTTPS 提供流量。在本文中,我们假设你已有一个在 Cloudflare 上处于活动状态的域名,以及一个正在运行的 Heroku 应用。


步骤 1 - 为 Heroku 应用添加自定义域名

请按照 Heroku 的说明操作:Custom Domain Names for Apps


步骤 2 - 在 Cloudflare DNS 中添加子域名

下方需要为子域名和 apex 域名(也称为“根域名”)添加 DNS 记录。了解如何在 Cloudflare 中管理 DNS 记录

步骤 2a - 添加子域名

在 Cloudflare 仪表板中,前往 DNS Records(DNS 记录) page。

Go to Records ↗

添加一条 wwwCNAME 记录,指向你在步骤 1 中为子域名获取的自定义域名(也称为 DNS target)。

Type Name Target Proxy status
CNAME www {example-domain}.herokudns.com Proxied

步骤 2b - 添加根域名

在 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

步骤 3 - 确认域名已通过 Cloudflare 路由

确认 Cloudflare 是否对你的域名生效,最简单的方法是执行 cURL 命令。

curl -I www.example.com
HTTP/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 命令。


步骤 4 - 为域名配置 SSL

步骤 4a - 启用 SSL

Cloudflare 在所有付费计划中提供 SANs 通配符证书,并在 Free 计划中提供 SNI 通配符证书。有关 SSL 的完整详情可在此找到

如果你不清楚这意味着什么,请前往 Cloudflare 仪表板中 SSL/TLS 应用的 Overview(概览) 选项卡。选择 Flexible 模式,以便通过 HTTPS 向所有公共访问者提供你的站点。

证书状态变为 • Active Certificate 后,传入流量将通过 HTTPS 提供给你的站点。访问者将在浏览器地址栏中看到域名以 HTTPS 为前缀。

步骤 4b - 强制所有流量使用 HTTPS

为确保流向你站点的所有流量均已加密,Cloudflare 允许你强制自动 HTTPS 重定向。要配置此功能,请参阅 Always Use HTTPS

然后,你可以使用 cURL 命令验证是否所有请求都被强制使用 HTTPS。

curl -I -L example.com
HTTP/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 证书尚未签发),你将在重定向后看到 525526 HTTP 响应。

请注意,Universal SSL 证书的签发通常最多需要 24 小时。我们的付费 SSL 证书会在 10–15 分钟内签发。

这篇文档对您有帮助吗?