結論から
お客様が自社のドメイン(たとえば portal.customer.com)でアプリを提供できるようにするには、そのドメインをCloudflareゾーンにカスタムホスト名として登録します。お客様は御社を指すCNAMEレコードを1件追加し、Cloudflareがホスト名の管理権限を確認し、認証局が証明書を発行すると、リクエストがアプリに届くようになります。
2026年10月時点で、Cloudflare for SaaSのプランページでは、Free、Pro、Businessの各プランに100件のカスタムホスト名が含まれ、追加分は1件あたり$0.10、上限は50,000ホスト名と記載されています。
設計を左右する制約が2つあります。1つは、有料のEnterpriseアドオンがなければ、お客様のベアなapexドメイン(customer.com)を御社に向けられないこと。もう1つは、ワイルドカードのカスタムホスト名、カスタム証明書、認証局の選択がEnterprise限定であることです。Cloudflare側の設定は数ステップで済みますが、その周辺のプロダクト作業には時間がかかります。本ガイドの大半はそこについての内容です。
カスタムホスト名とは
カスタムホスト名とは、お客様が所有するドメインをCloudflareが御社のゾーンへルーティングするものです。セットアップガイドでは、次の4つの要素で構成されます。
- SaaSゾーン。Cloudflare上にある御社自身のドメインで、Cloudflare for SaaSを有効にしたもの。始めるだけならFreeプランのゾーンで十分です。
- フォールバックオリジン。カスタムホスト名のトラフィックの送り先となる、プロキシ有効のDNSレコード(例:
proxy-fallback.yourapp.com)。 - CNAMEターゲット。お客様に向けてもらうための、わかりやすい名前(任意)。たとえば
customers.yourapp.comのようなものです。 - カスタムホスト名。APIまたはダッシュボードで作成するお客様のドメインで、それぞれ独自の検証状態を持ちます。Cloudflareは1件ごとに2つの証明書を発行します。ECDSA P-256のプライマリ証明書と、古いクライアント向けのRSA 2048ビットのフォールバック証明書です。
アプリがDardoも基盤としているCloudflare Workers上で動いているなら、Workerをフォールバックオリジンにできます。*/* ルートがすべてのカスタムホスト名へのリクエストを受け止め、コードが Host ヘッダーを読んでテナントを特定します。Cloudflareにはホスト名ごとのカスタムメタデータもありますが、有料のEnterpriseアドオンのため、他のプランではその参照を自社のデータベース(D1など)で行います。
処理の流れ
- お客様がドメインを入力します。アプリの設定画面で入力されたドメインをバックエンドで正規化し、証明書の検証方法を指定してCreate Custom Hostnameエンドポイントを呼び出します。
- お客様がDNSレコードを追加します。画面に表示したレコードを設定してもらいます。例:
portal.customer.com CNAME customers.yourapp.com - Cloudflareがホスト名の所有権を検証します。リアルタイム検証はCNAMEが現れた時点で実行され、短いダウンタイムが生じることがあります。事前検証は、すでに稼働中のドメイン向けに、DNSを切り替える前にTXTレコードまたはHTTPトークンで行います。お客様のゾーン自体もCloudflare上にある場合(「Orange-to-Orange」構成)は、事前検証に対応していません。
- 認証局がドメインの管理権限を検証し、証明書を発行します。
- ホスト名が利用可能になるのは、
statusとssl.statusがどちらもactiveで、DNSがターゲットを指しているときです。Cloudflareは、ssl.statusがactiveになる前にTLSハンドシェイクが成功する場合があると注意しています。正しい状態は、カスタムホスト名の詳細エンドポイントで確認してください。
証明書の検証方法
Cloudflareの検証ガイドでは、次の選択肢が示されています。
| 方法 | お客様の作業 | DNS切り替え前に可能 | 備考 |
|---|---|---|---|
| HTTP(自動) | CNAMEを追加するだけ | 不可 | 最も簡単。Cloudflareは、お客様が「数分のダウンタイムを許容できる」場合に推奨しています。 |
| HTTP(手動) | ドメインがすでに御社を指していれば作業は不要。そうでなければ、現在のサーバーで御社のトークンを配信する | 可 | 別のプロバイダーでドメインが稼働中のときに便利です。 |
| TXT | 御社から伝えたTXTレコードを追加する | 可 | ワイルドカードのホスト名には必須です。 |
| Delegated DCV | _acme-challenge のCNAMEを1回だけ追加する | 可 | 以後のすべての証明書をCloudflareが更新できます。既存の _acme-challenge TXTレコードがあると使えません。 |
検証は永遠に待ってはくれません。Cloudflareはホスト名の検証を7日間で75回再試行し、バックオフのスケジュールにあるとおり「検証に失敗した場合、カスタムホスト名は削除されます」。証明書のトークンにも期限があり、Let's Encryptでは7日、Google Trust ServicesまたはSSL.comでは14日です。
料金(2026年10月時点)
| Free | Pro | Business | Enterprise | |
|---|---|---|---|---|
| 含まれるホスト名数 | 100 | 100 | 100 | 個別見積もり |
| 追加ホスト名1件あたりの料金 | $0.10 | $0.10 | $0.10 | 個別見積もり |
| ホスト名の上限 | 50,000 | 50,000 | 50,000 | 無制限(50,000を超える場合は営業へ問い合わせ) |
| ワイルドカードのカスタムホスト名 | 不可 | 不可 | 不可 | 可 |
| カスタム証明書・認証局の選択 | 不可 | 不可 | 不可 | 可 |
| apexプロキシ / BYOIP | 不可 | 不可 | 不可 | 有料アドオン |
| カスタムメタデータ | 不可 | 不可 | 不可 | 有料アドオン |
プランページでは$0.10の期間が明記されていません。Cloudflareの2022年の発表では、価格を「月額$2から$0.10へ」引き下げたと説明されていました。この月額で計算すると、お客様のドメインが1,000件の場合、含まれる100件を超える900件分で月額$90になります。
プロダクト設計では、課金に関する2つのルールが重要です。Cloudflareのクォータと課金のページによると、すべてのホスト名は削除するまで利用数にカウントされ、「検証中またはアクティベーション待ちのホスト名」も含まれます。また、Enterprise以外のプランにはAPIの適用しきい値があり、超えると新しいホスト名が拒否されます。
つまずきやすいポイント
apexドメイン
Cloudflareのセットアップガイドには明記されています。「デフォルトでは、Aレコードでターゲットを指す構成はサポートされていません。」多くのDNSプロバイダーはドメインのルートにCNAMEを置けないため、お客様には www.customer.com や app.customer.com のようなサブドメインを使ってもらう必要があります。apexプロキシはアカウントに固定のIPプレフィックスを割り当て、お客様がAレコードを使えるようにしますが、別途費用がかかるEnterpriseアドオンです。利用しない場合は、サブドメインを使ってもらい、DNSプロバイダー側でベアドメインをそこへ転送する方法を案内しましょう。
認証局とCAAレコード
Cloudflareの認証局のリファレンスでは、カスタムホスト名向けにLet's Encrypt(90日間の証明書)、Google Trust ServicesとSSL.com(14日、30日、90日)が挙げられています。認証局を選べるのはEnterpriseのみで、それ以外ではCloudflareがデフォルトを使い、先にCAAレコードを確認します。お客様のCAAレコードがその認証局を許可していないと、発行は「CAA records block issuance」で失敗し、直せるのはお客様だけです。CAAの参照はCNAMEチェーンをたどるため、御社のターゲットドメインのCAAレコードも対象になります。トラブルシューティングガイドには、お客様側のその他の失敗例として、DNSSECの不備とSERVFAILを返すDNSサーバーが挙げられています。
更新
カスタムホスト名の証明書の有効期間は90日で、有効期限の30日前から更新できます。アクティブでワイルドカードではないホスト名は、HTTPで自動更新されます。お客様がDNSを変更したなどでホスト名がアクティブでなくなった場合は、お客様に新しいトークンを設置してもらう必要があり、その連絡は御社の責任になります。ワイルドカードはTXTでしか更新できず、それを自動化するのがDelegated DCVです。
他のCDNやCloudflareを使っているお客様
Cloudflareは、他のCDNがDNSレコードを隠す場合、そのCDNを使うカスタムホスト名には対応しないとしています。ドメインがCloudflare上にあるお客様では逆の問題が起こります。お客様が解約してもホスト名を削除しないと、DNSを変更した後でも御社のサービスへルーティングされ続けることがあります。
検証パスの手前に置くWorker
Workerをフォールバックオリジンにする場合は、/.well-known/pki-validation/* と /.well-known/acme-challenge/* をそのまま通過させる必要があります。アプリの404ページを返すキャッチオールのルートがあると、HTTP検証が失敗します。
周辺のプロダクト作業
- プランごとの制御。どのプランでカスタムドメインを何件まで含めるかを決め、Cloudflareを呼び出す前にチェックします。Cloudflareのクォータやしきい値は上限であり、御社の料金体系ではありません。
- オンボーディング画面。入力欄は1つ。小文字に変換し、プロトコルとパスを取り除き、apexプロキシを契約していない限りベアなapexドメインは拒否します。Cloudflareがカスタムホスト名として作成してはならないとしている、自社のゾーン名も拒否します。そのうえで、追加すべきレコードをそのまま表示し、コピーボタンを付けましょう。
- 2つのステータスをわかりやすい言葉で。ホスト名と証明書は別々に検証されるので、両方を表示します。
ssl.validation_errorsは手順の案内に置き換えましょう。「pending_validation」より「お客様のドメインのCAAレコードが当社の認証局を許可していません。次のレコードを追加してください」のほうが伝わります。作成直後のレスポンスには検証用レコードがまだ含まれていないことがあるため、少し待ってからホスト名を再取得します。CloudflareのWebhook通知は検証や発行のイベントを知らせてくれるので、ポーリングよりおすすめです。 - 更新の監視。証明書がアクティブでないホスト名や、DNSが御社を指さなくなったホスト名を毎日チェックして知らせるジョブを用意します。お客様より先に、チームが気づけます。
- 後片付け。検証が通らないままのホスト名や、解約したお客様のホスト名は削除します。どちらも削除するまで課金されます。
- テナントの分離。テナントの特定は、データベース上のアクティブなホスト名だけで行います。テナントに御社ドメインのサブドメインも提供する場合、Vercelのドメインのドキュメントが指摘するように、あるテナントが親ドメインに設定したCookieが他のテナントにも届いてしまうため、ダッシュボードとログインは別のドメインに置きましょう。
- サポート用プレイブック。エラーごとに誰が対処するかをまとめた、チーム向けの短いページを用意します。CNAMEの未設定、CAA、DNSSEC、SERVFAILはお客様側、トークン、認証局のレート制限、Workerのルートは御社側です。
こうした仕事は、DardoがWebアプリ開発で手がけている領域です。カスタムドメインの要望が最も多いのは、ホワイトラベルのクライアントポータルです。
代替案:VercelとNetlify
アプリがすでに別の環境で動いている場合、どちらのホスティングでもお客様のドメインを扱えます。2026年10月時点で、それぞれ文書化された制限があります。
| Cloudflare for SaaS | Vercel | Netlify | |
|---|---|---|---|
| ドメインの上限 | 100件含まれ、Free・Pro・Businessでは最大50,000件 | Hobbyはプロジェクトあたり50件、ProとEnterpriseは「無制限」で、ソフトリミットはそれぞれ100,000件と1,000,000件 | 「1つのサイトに割り当てるドメインエイリアスは50件までを推奨します」 |
| apexドメイン | Enterpriseアドオン | プロジェクトのドメインカードに表示される値へのAレコード | ALIAS、ANAME、またはフラット化されたCNAME。フォールバックとしてAレコード |
| 証明書 | 自動で、ホスト名ごとに2つ。カスタム証明書はEnterprise | ドメイン確認後に自動。カスタム証明書はEnterprise | Let's Encryptを自動で利用。カスタム証明書は手動で更新 |
| ワイルドカード | Enterprise | Vercelのネームサーバー、または委任した _acme-challenge が必要 | Netlify DNS上のドメインでは自動 |
| 向いている用途 | 1つのゾーンで多数のお客様ドメインを扱う | REST APIとSDKを備えたマルチテナントのプラットフォーム | 1サイトあたり多くても数十ドメイン |
最もはっきりした違いは、Vercelのapex対応です。お客様はAレコードでベアドメインを向けられます。ただし、VercelのフェアユースガイドラインではHobbyプランは「非商用の個人利用のみ」に限られるため、有料のSaaSはProから始めることになります。Netlifyは50エイリアスまでという推奨があるため、1つのデプロイで数百のお客様ドメインを扱う用途には向きません。
いつ作るべきか
要望が2〜3社なら、Cloudflareのダッシュボードでホスト名を追加し、チェックリストで運用すれば十分です。カスタムドメインが販売するプランやホワイトラベル提供の一部になった段階で、セルフサービスの仕組みを作りましょう。ベアなapexドメインやワイルドカードを大規模に必要とするなら、制限を前提に設計する前に、CloudflareにEnterpriseについて相談してください。
ステータス表示、アラート、サポート用のメモまで含めて、この仕組みをプロダクトに組み込みたい場合は、アプリについてご相談ください。
