カスタムドメイン(Custom Domains)を使うと、DNS 設定の変更や証明書管理なしで、Worker をドメインまたはサブドメインに接続できます。Worker にカスタムドメインを設定すると、Cloudflare が DNS レコードを作成し、必要な証明書を発行します。作成された DNS レコードは Worker を直接指します。ルート と違い、カスタムドメインはドメインまたはサブドメインのすべてのパスを Worker に向けます。
カスタムドメインは、Worker がオリジンになる Cloudflare ゾーン内の、ドメインまたはサブドメイン(example.com や shop.example.com など)へのルートです。
Worker をインターネットに接続したい場合で、常に通信するアプリケーションサーバーがないときに、カスタムドメインを推奨します。外部依存がある場合は、対象 URI を持つ Request オブジェクトを作り、fetch() で到達できます。
カスタムドメインは重ねて使えます。たとえば Worker A を app.example.com に、Worker B を api.example.com に付けている場合、Worker A は api.example.com に対して fetch() を呼び、Worker B を起動できます。
カスタムドメインは、ルートと違い、同じゾーン内から fetch() でも呼び出せます。
カスタムドメインを追加するには、次が必要です。
- 有効な Cloudflare ゾーン。
- 呼び出す Worker。
カスタムドメインは、Cloudflare ダッシュボード、Wrangler、または API で Worker に付けられます。
ダッシュボードでカスタムドメインを設定するには、次の手順を行います。
-
Cloudflare ダッシュボードで、Workers & Pages ページを開きます。
Workers & Pages を開く ↗ -
Overview で Worker を選びます。
-
Settings > Domains & Routes > Add > Custom Domain を開きます。
-
Worker に設定するドメインを入力します。
-
Add Custom Domain を選びます。
ドメインまたはサブドメインを追加すると、Cloudflare が新しい DNS レコードを作成します。カスタムドメインは複数追加できます。
訪問者がカスタムドメインにアクセスする前にサインインを必須にするには、Cloudflare Access を使います。
ホスト名ベースの Access でカスタムドメインを保護するか、ルート、カスタムドメイン、workers.dev ホスト名、プレビューを含む Worker 自体を保護できます。詳細は Cloudflare Access を参照してください。
Wrangler 設定ファイル でカスタムドメインを設定するには、routes 配下の各パターンに custom_domain=true オプションを追加します。たとえば、カスタムドメインを設定するには次のようにします。
{
"routes": [
{
"pattern": "shop.example.com",
"custom_domain": true
}
]
}[[routes]]
pattern = "shop.example.com"
custom_domain = true複数のカスタムドメインを設定するには、次のようにします。
{
"routes": [
{
"pattern": "shop.example.com",
"custom_domain": true
},
{
"pattern": "shop-two.example.com",
"custom_domain": true
}
]
}[[routes]]
pattern = "shop.example.com"
custom_domain = true
[[routes]]
pattern = "shop-two.example.com"
custom_domain = true同じゾーンでは、ルート または workers.dev サブドメインで動いている別の Worker と通信する唯一の方法は、サービスバインディング です。
同じゾーンでも、対象 Worker がルートではなくカスタムドメインで動いている場合、この制限はなくなります。同じゾーン内で、ある Worker からカスタムドメイン上の別の Worker への fetch リクエストは、サービスバインディングなしで成功します。
たとえば、両方の Worker が example.com の Cloudflare ゾーンで動いている、次のシナリオを考えます。
worker-a が worker-b に fetch リクエストを送ると、同一ゾーンの fetch 制限のため失敗します。このリクエストを解決するには、worker-a から worker-b へのサービスバインディングが必要です。
export default {
fetch(request) {
// This will fail
return fetch("https://shop.example.com");
},
};一方、worker-b がカスタムドメイン shop.example.com で動くように設定されていれば、fetch リクエストは成功します。
カスタムドメインは ワイルドカード DNS レコード をサポートしません。受信リクエストは、カスタムドメインに登録したドメインまたはサブドメインと完全一致する必要があります。この照合では、URL の他の部分(パス、クエリパラメータ)は見ません。たとえば、api-gateway Worker に付けたカスタムドメインを api.example.com に作ると、api.example.com/login と api.example.com/user のどちらも、同じ api-gateway Worker を呼び出します。
カスタムドメイン上の Worker はオリジンとして扱われます。カスタムドメインより前のルートで動く Worker は、受信した Request オブジェクトを使って fetch(request) を発行し、カスタムドメインに登録した Worker を任意で呼び出せます。つまり、リクエストがカスタムドメインの Worker に届く前に、別の Worker を動かせます。言い換えると、同じリクエストで 2 つの Worker を連鎖できます。
たとえば、次の流れを考えます。
api.example.comのカスタムドメインが、api-workerWorker を指します。api.example.com/authに追加したルートが、auth-workerWorker を指します。api.example.com/authへのリクエストは、auth-workerWorker を起動します。auth-workerWorker 内でfetch(request)を使うと、通常のアプリケーションサーバーと同様にapi-workerWorker が呼び出されます。
export default {
fetch(request) {
const url = new URL(request.url);
if (url.searchParams.get("auth") !== "SECRET_TOKEN") {
return new Response(null, { status: 401 });
} else {
// This will invoke `api-worker`
return fetch(request);
}
},
};カスタムドメインを作成すると、対象ゾーンの対象ホスト名に対して Advanced Certificate も生成されます。
これらの証明書はデフォルト設定で生成されます。設定を上書きするには、生成された証明書を削除し、Cloudflare ダッシュボードで自分の証明書を作成します。手順は Advanced Certificate の管理 を参照してください。
カスタムドメインはホスト名の完全一致が必要なため、example.com に付けた Worker は www.example.com へのリクエストを受け取りません。逆も同じです。ドメインの両方の形を動かすには、リダイレクトルールを設定します。
リダイレクト 元 のホスト名には、プロキシされた DNS レコード も必要です。これがないと、Cloudflare はリダイレクトルールを適用できません。
- www からルートへ:
www向けに、192.0.2.0を指すプロキシ済み DNSAレコード、または100::を指すプロキシ済みAAAAレコードを追加します - ルートから www へ: ルートドメイン向けに、
192.0.2.0を指すプロキシ済み DNSAレコード、または100::を指すプロキシ済みAAAAレコードを追加します
現在、/* 付きの ルート で Worker を呼び出していて、100:: などを指す CNAME レコードがある場合、カスタムドメインへの置き換えを推奨します。
ルート example.com/* を移行するには、次の手順を行います。
-
Cloudflare ダッシュボードで、ドメインの DNS Records ページを開きます。
Records を開く ↗ -
example.comの CNAME レコードを削除します。 -
Account Home > Workers & Pages を開きます。
-
Overview で Worker を選び、Settings > Domains & Routes を開きます。
-
Add > Custom domain を選び、
example.comを追加します。 -
Worker の Settings > Domains & Routes にあるルート
example.com/*を削除します。
Wrangler 設定ファイル のルート example.com/* を移行するには、次の手順を行います。
-
Cloudflare ダッシュボードで、ドメインの DNS Records ページを開きます。
Records を開く ↗ -
example.comの CNAME レコードを削除します。 -
Wrangler ファイルに次を追加します。
{ "routes": [ { "pattern": "example.com", "custom_domain": true } ] }[[routes]] pattern = "example.com" custom_domain = true -
npx wrangler deployを実行し、Worker が動作するカスタムドメインを作成します。