コンテンツにスキップ

カスタムドメイン

背景

カスタムドメインを使用すると、DNS設定を変更したり、証明書管理を行ったりすることなく、Workerをドメインまたはサブドメインに接続できます。Workerのカスタムドメインを設定すると、Cloudflareがあなたの代わりにDNSレコードを作成し、必要な証明書を発行します。作成されたDNSレコードは、直接あなたのWorkerを指します。ルートとは異なり、カスタムドメインはドメインまたはサブドメインのすべてのパスをあなたのWorkerにポイントします。

カスタムドメインは、WorkerがオリジンであるCloudflareゾーン内のドメインまたはサブドメイン(例:example.comshop.example.com)へのルートです。

カスタムドメインは、Workerをインターネットに接続したいが、常に通信したいアプリケーションサーバーがない場合に推奨されます。外部依存関係がある場合は、ターゲットURIを持つRequestオブジェクトを作成し、fetch()を使用してアクセスできます。

カスタムドメインは重ねて使用できます。たとえば、app.example.comにWorker Aが接続され、api.example.comにWorker Bが接続されている場合、Worker Aはfetch()api.example.comに呼び出し、Worker Bを起動できます。

カスタムドメインは、外部依存関係のように重ねて使用できます

カスタムドメインは、ルートとは異なり、同じゾーン内でfetch()を介して呼び出すこともできます。

カスタムドメインの追加

カスタムドメインを追加するには、次の条件を満たす必要があります:

  1. アクティブなCloudflareゾーン
  2. 呼び出すWorker。

カスタムドメインは、CloudflareダッシュボードWrangler、またはAPIを介してWorkerに接続できます。

ダッシュボードでのカスタムドメインの設定

ダッシュボードでカスタムドメインを設定するには:

  1. Cloudflareダッシュボードにログインし、アカウントを選択します。
  2. Workers & Pagesを選択し、概要でWorkerを選択します。
  3. 設定 > トリガー > カスタムドメイン > カスタムドメインの追加に進みます。
  4. Workerのために設定したいドメインを入力します。
  5. カスタムドメインの追加を選択します。

ドメインまたはサブドメインを追加すると、Cloudflareが新しいDNSレコードを作成します。複数のカスタムドメインを追加できます。

wrangler.tomlでのカスタムドメインの設定

wrangler.tomlでカスタムドメインを設定するには、routesの各パターンに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 }
]

Worker間の通信

同じゾーン内で、Workerがルート上で実行されている別のWorkerと通信する唯一の方法は、サービスバインディングを介することです。

同じゾーン内で、Workerがルートではなくカスタムドメインで実行されているターゲットWorkerと通信しようとする場合、制限は解除されます。同じゾーン内で1つのWorkerから別のWorkerに送信されたfetchリクエストは、サービスバインディングなしで成功します。

たとえば、次のシナリオを考えてみましょう。両方のWorkerがexample.com Cloudflareゾーンで実行されています:

  • worker-aルート auth.example.com/*で実行されています。
  • worker-bルート shop.example.com/*で実行されています。

worker-aworker-bにfetchリクエストを送信すると、リクエストは失敗します。同じゾーン内のfetchリクエストに対する制限のためです。worker-aは、このリクエストを解決するためにworker-bへのサービスバインディングを持っている必要があります。

worker-a
export default {
fetch(request) {
// これは失敗します
return fetch("https://shop.example.com")
}
}

しかし、worker-bがカスタムドメインshop.example.comで実行されるように設定されている場合、fetchリクエストは成功します。

リクエストマッチングの動作

カスタムドメインはワイルドカードDNSレコードをサポートしていません。受信リクエストは、カスタムドメインが登録されているドメインまたはサブドメインと正確に一致する必要があります。URLの他の部分(パス、クエリパラメータ)は、このマッチングロジックを実行する際には考慮されません。たとえば、api.example.comにカスタムドメインを作成し、api-gateway Workerに接続した場合、api.example.com/loginまたはapi.example.com/userへのリクエストは、同じapi-gateway Workerを呼び出します。

カスタムドメインは標準のDNS順序とマッチングロジックに従います

ルートとの相互作用

カスタムドメインで実行されているWorkerはオリジンとして扱われます。カスタムドメインの前に実行されているルート上のWorkerは、受信Requestオブジェクトを使用してfetch(request)を発行することで、カスタムドメインに登録されたWorkerをオプションで呼び出すことができます。つまり、リクエストがカスタムドメインWorkerに到達する前に実行されるWorkerを設定できます。言い換えれば、同じリクエスト内で2つのWorkerを連鎖させることができます。

たとえば、次のワークフローを考えてみましょう:

  1. api.example.comのカスタムドメインがapi-worker Workerを指します。
  2. api.example.com/authに追加されたルートがauth-worker Workerを指します。
  3. api.example.com/authへのリクエストは、auth-worker Workerをトリガーします。
  4. auth-worker Worker内でfetch(request)を使用すると、api-worker Workerが通常のアプリケーションサーバーのように呼び出されます。
auth-worker
export default {
fetch(request) {
const url = new URL(request.url)
if(url.searchParams.get("auth") !== "SECRET_TOKEN") {
return new Response(null, { status: 401 })
} else {
// これは`api-worker`を呼び出します
return fetch(request)
}
}
}

証明書

カスタムドメインを作成すると、ターゲットホスト名のためにターゲットゾーンに高度な証明書が生成されます。

これらの証明書はデフォルト設定で生成されます。これらの設定を上書きするには、生成された証明書を削除し、Cloudflareダッシュボードで独自の証明書を作成します。手順については、高度な証明書の管理を参照してください。

ルートからの移行

現在、/*を使用してルートでWorkerを呼び出しており、100::などを指すCNAMEレコードがある場合、カスタムドメインは推奨される代替手段です。

ダッシュボード経由でのルートからの移行

ルートexample.com/*を移行するには:

  1. Cloudflareダッシュボードにログインし、アカウントを選択します。
  2. DNSに移動し、example.comのCNAMEレコードを削除します。
  3. アカウントホーム > Workers & Pagesに移動します。
  4. 概要でWorkerを選択 > トリガーを選択します。
  5. カスタムドメインの追加を選択し、example.comを追加します。
  6. Worker > トリガー > ルートにあるルートexample.com/*を削除します。

Wrangler経由でのルートからの移行

wrangler.tomlでルートexample.com/*を移行するには:

  1. Cloudflareダッシュボードにログインし、アカウントを選択します。
  2. DNSに移動し、example.comのCNAMEレコードを削除します。
  3. wrangler.tomlファイルに次の内容を追加します:
routes = [
{ pattern = "example.com", custom_domain = true }
]
  1. npx wrangler deployを実行して、Workerが実行されるカスタムドメインを作成します。