Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Cloudflare と Heroku を HTTPS で設定する

最終更新 Markdown で表示Agent セットアップ

概要

Heroku は、あらかじめ設定された複数のプログラミング言語に対応するクラウド PaaS です。インフラは Heroku が担うため、コマンドライン作業ではなくアプリケーションに集中できます。

この記事では、トラフィックを HTTPS で配信するよう Heroku と Cloudflare を設定する方法を説明します。前提として、Cloudflare 上で有効なドメイン と、稼働中の Heroku アプリがあるものとします。


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

Heroku の手順に従います: Custom Domain Names for Apps


手順 2 - Cloudflare DNS にサブドメインを追加する

次に、サブドメインと apex ドメイン(ルートドメインとも呼ばれます)の DNS レコードを追加します。手順は Cloudflare での DNS レコードの管理 を参照してください。

手順 2a - サブドメインを追加する

Cloudflare ダッシュボードで DNS Records ページを開きます。

Records を開く ↗

手順 1 でサブドメイン用に取得したカスタムドメイン(DNS target とも呼ばれます)を指す、wwwCNAME レコードを追加します。

タイプ 名前 ターゲット プロキシの状態
CNAME www {example-domain}.herokudns.com Proxied

手順 2b - ルートドメインを追加する

Heroku にルートドメイン(apex ドメイン)を追加する場合も、ルートから指す CNAME レコードが必要です。Heroku は利用者向けに IP アドレスを公開しないため、A レコードは使えません。

ルートドメインへのリクエストは、Cloudflare の CNAME flattening で解決できます。

ルート用の CNAME レコードを追加し、手順 1 でドメイン用に取得した DNS target を指します。

タイプ 名前 ターゲット プロキシの状態
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

Cloudflare がプロキシしているリクエストは、CF-Ray レスポンスヘッダーで識別できます。このヘッダーがあれば、リクエストは Cloudflare によってプロキシされています。

DNS 設定に追加したサブドメインについても、同じ cURL コマンドを繰り返せます。


手順 4 - ドメインの SSL を設定する

手順 4a - SSL を有効にする

Cloudflare は有料プランすべてに SAN のワイルドカード証明書を、Free プランには SNI ワイルドカード証明書を提供します。SSL の詳細は Cloudflare の SSL を参照してください。

意味が分からない場合は、Cloudflare ダッシュボードの SSL/TLS アプリで Overview タブを開きます。一般の訪問者へサイトを HTTPS で配信するには、Flexible モードを選びます。

証明書の状態が • Active Certificate に変わると、着信トラフィックは HTTPS でサイトへ配信されます。訪問者のブラウザーバーには、ドメイン名の前に HTTPS が表示されます。

手順 4b - すべてのトラフィックを HTTPS に強制する

サイトへのトラフィックをすべて暗号化するには、Cloudflare で自動 HTTPS リダイレクトを強制できます。 設定方法は Always Use HTTPS を参照してください。

すべてのリクエストが HTTPS に強制されているかは、cURL コマンドで確認できます。

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 レスポンスが返ります。

Universal SSL 証明書の発行には、通常最大 24 時間かかります。有料の SSL 証明書は 10〜15 分で発行されます。

役に立ちましたか?