通过 HTTPS 配置 Cloudflare 和 Heroku

Heroku 是一个支持多种预配置编程语言的云 PaaS。Heroku 可处理您的所有底层运行,因此您可以专注于您的应用程序,而不需要为命令行分心。

本文将介绍如何使用 Cloudflare 配置 Heroku,以便通过 HTTPS 为您的流量提供服务。本文假设您已经在 Cloudflare 中已有一个活动域,以及正在使用 Heroku 应用。

将自定义域添加到 Heroku 应用

  1. 登录 Heroku,选择您的应用,然后转到Settings (设置)
  2. 向下滚动到 Domains and certificates,然后单击Add Domain以添加域名。

如果您通过 CLI 操作 Heroku,可以选择使用以下命令添加域名:

heroku domain:add [example.com]

设置您的 Cloudflare DNS

重要事项:忽略在上一步中创建的推荐 Heroku CNAME(example.com.herokudns.com)。Cloudflare 的安全和速度功能无法与此记录一起使用。 请使用为您的应用配置的默认 Heroku 域名(通常格式如下:cf-solutions.herokuapp.com)。

添加子域

首先,登录您的 Cloudflare 帐户,导航到 DNS 应用并为您的 Heroku 应用添加 CNAME 条目。

Screen_Shot_2018-01-23_at_2.58.16_PM.png

添加根域

在 Heroku 中添加根域或顶端域需要使用从根指向的 CNAME 记录。您不能在 Heroku 中使用 A 记录,因为没有已公开的 IP 地址可供 Heroku 用户使用。

不用担心,Cloudflare 提供了 CNAME flattening 来解析对根域的请求。您只需为您的根添加 CNAME 记录(例如 kingkong.com),并将其指向相同的服务器名称 (cf-solutions.herokuapp.com)。 

确认您的域已通过 Cloudflare 路由

确认 Cloudflare 是否适用于您的域的最简单方法是发出 cURL 命令。

╰─➤  curl -I www.kingkong.solutions
HTTP/1.1 200 OK
Date:Tue, 23 Jan 2018 18:51:30 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Set-Cookie: __cfduid=daeef1c4f83da8dd3ae5745d5e869b78e1516733490; expires=Wed, 23-Jan-19 18:51:30 GMT; path=/; domain=.www.kingkong.solutions; HttpOnly
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

您可以通过 __cfuid cookie 或 CF-Ray 响应标头识别 Cloudflare 代理的请求。如果存在这两者中的任何一个,那代表您的请求将由 Cloudflare 代理。

您可对已在 DNS 设置中配置的任何子域重复上述 cURL 命令。

为域名设置 SSL

  1. Cloudflare 将为所有付费计划提供 SAN 通配符证书,并为免费版计划提供 SNI 通配符证书。有关 SSL 的完整详细信息,请访问此处
  2. 如果您还有任何问题,请到 Cloudflare 仪表板中的 Crypto 应用。选择Flexible(灵活)模式,以通过 HTTPS 为所有公共访问者提供网站服务:

一旦证书状态更改为 • 活动证书,传入流量将通过 HTTPS 提供给您的网站(例如,访问者将在浏览器栏中看到以您的域名前缀为 HTTPS)。 

强制所有流量通过 HTTPS

要强制所有流量通过 HTTPS,请使用 Cloudflare 仪表板中的 Page Rule 应用:

导航到 Page Rule 应用后,便可以开始添加涵盖整个域的新规则:

Capto_Capture_2018-01-23_03-17-19_PM.png

输入您的 Page Rule(即“http://*example.com/*”),然后单击保存并部署

然后,您可以像以前一样使用类似的 cURL 命令来验证是否通过 HTTPS 强制执行所有请求。

╰─➤  curl -I -L kingkong.solutions
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://kingkong.solutions/
Server: cloudflare
CF-RAY:3e1e77d5c42b8c52-SFO-DOG

如果 SSL 不适用于您的域(例如,您的 SSL 证书尚未颁发),您将在重定向后看到 HTTP 响应的 525526 错误。

请注意,颁发 Universal SSL 证书有可能需要长达 24 小时。付费版的 SSL 证书通常会在 10-15 分钟内颁发。 

Not finding what you need?

95% of questions can be answered using the search tool. This is the quickest way to get a response.

由 Zendesk 提供技术支持