コンテンツにスキップ

CloudflareとHerokuをHTTPSで設定する

概要

Herokuは、いくつかの事前設定されたプログラミング言語をサポートするクラウドPaaSです。Herokuはすべてのインフラストラクチャを管理するため、コマンドラインで作業することなくアプリケーションに集中できます。

この記事では、HerokuをCloudflareと設定して、HTTPS経由でトラフィックを提供する方法について説明します。この記事では、すでにCloudflareでアクティブなドメインを持っており、Herokuアプリが稼働していると仮定します。


ステップ1 - Herokuアプリにカスタムドメインを追加する

Herokuの指示に従ってください: アプリのカスタムドメイン名


ステップ2 - Cloudflare DNSにサブドメインを追加する

以下では、サブドメインとルートドメイン(「ルートドメイン」とも呼ばれます)のDNSレコードを追加する必要があります。CloudflareでのDNSレコードの管理方法を学んでください。

ステップ2a - サブドメインを追加する

まず、Cloudflareアカウントにログインし、DNSアプリに移動して、上記のステップ1で取得したカスタムドメイン(DNSターゲットとも呼ばれます)を指す’www’ CNAME レコードを追加します。

TypeNameTargetProxy status
CNAMEwww{example-domain}.herokudns.comProxied

ステップ2b - ルートドメインを追加する

Herokuにルートまたはアペックスドメインを追加するには、ルートから指すCNAMEレコードを使用する必要があります。Herokuユーザーが使用するためのIPアドレスは公開されていないため、Aレコードを使用することはできません。

幸いなことに、Cloudflareはルートドメインのリクエストを解決するためのCNAMEフラッティングを提供しています。

ルート用のCNAMEレコードを追加し、上記のステップ1で取得したドメインのDNSターゲットを指します。

TypeNameTargetProxy status
CNAME@{example-domain}.herokudns.comProxied

ステップ3 - ドメインがCloudflareを経由してルーティングされていることを確認する

Cloudflareがあなたのドメインで機能していることを確認する最も簡単な方法は、cURLコマンドを発行することです。

Terminal window
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ワイルドカード証明書を提供し、無料プランではSNIワイルドカード証明書を提供します。SSLの詳細はこちらで確認できます。

これが何を意味するのかわからない場合は、CloudflareダッシュボードのSSL/TLSアプリの概要タブに移動してください。Flexibleモードを選択して、すべての一般公開訪問者にHTTPS経由でサイトを提供します。

証明書のステータスが**• アクティブ証明書**に変わると、受信トラフィックはHTTPS経由でサイトに提供されます(例:訪問者はブラウザバーにドメイン名の前にHTTPSが表示されます)。

ステップ4b - すべてのトラフィックをHTTPSに強制する

サイトへのすべてのトラフィックが暗号化されるように、Cloudflareは自動HTTPSリダイレクトを強制することができます。これを設定するには、すべての訪問者をHTTPS/SSLにリダイレクトする方法は?を参照してください。

その後、cURLコマンドを使用して、すべてのリクエストがHTTPSに強制されていることを確認できます。

Terminal window
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証明書がまだ発行されていない場合)、リダイレクト後に525または526のHTTPレスポンスが表示されます。

ユニバーサルSSL証明書の発行には通常最大24時間かかります。有料SSL証明書は10〜15分以内に発行されます。