Skip to content

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

カスタムドメイン

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

背景

カスタムドメイン(Custom Domains)を使うと、DNS 設定の変更や証明書管理なしで、Worker をドメインまたはサブドメインに接続できます。Worker にカスタムドメインを設定すると、Cloudflare が DNS レコードを作成し、必要な証明書を発行します。作成された DNS レコードは Worker を直接指します。ルート と違い、カスタムドメインはドメインまたはサブドメインのすべてのパスを Worker に向けます。

カスタムドメインは、Worker がオリジンになる Cloudflare ゾーン内の、ドメインまたはサブドメイン(example.comshop.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() でも呼び出せます。

カスタムドメインを追加する

カスタムドメインを追加するには、次が必要です。

  1. 有効な Cloudflare ゾーン
  2. 呼び出す Worker。

カスタムドメインは、Cloudflare ダッシュボード、Wrangler、または API で Worker に付けられます。

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

ダッシュボードでカスタムドメインを設定するには、次の手順を行います。

  1. Cloudflare ダッシュボードで、Workers & Pages ページを開きます。

    Workers & Pages を開く ↗
  2. Overview で Worker を選びます。

  3. Settings > Domains & Routes > Add > Custom Domain を開きます。

  4. Worker に設定するドメインを入力します。

  5. Add Custom Domain を選びます。

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

カスタムドメインでサインインを必須にする

訪問者がカスタムドメインにアクセスする前にサインインを必須にするには、Cloudflare Access を使います。

ホスト名ベースの Access でカスタムドメインを保護するか、ルート、カスタムドメイン、workers.dev ホスト名、プレビューを含む Worker 自体を保護できます。詳細は Cloudflare Access を参照してください。

Wrangler 設定ファイルでカスタムドメインを設定する

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

Worker 間の通信

同じゾーンでは、ルート または workers.dev サブドメインで動いている別の Worker と通信する唯一の方法は、サービスバインディング です。

同じゾーンでも、対象 Worker がルートではなくカスタムドメインで動いている場合、この制限はなくなります。同じゾーン内で、ある 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-ajs
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/loginapi.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-workerjs
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 の管理 を参照してください。

www とルートドメインの間でリダイレクトする

カスタムドメインはホスト名の完全一致が必要なため、example.com に付けた Worker は www.example.com へのリクエストを受け取りません。逆も同じです。ドメインの両方の形を動かすには、リダイレクトルールを設定します。

リダイレクト のホスト名には、プロキシされた DNS レコード も必要です。これがないと、Cloudflare はリダイレクトルールを適用できません。

  • www からルートへ: www 向けに、192.0.2.0 を指すプロキシ済み DNS A レコード、または 100:: を指すプロキシ済み AAAA レコードを追加します
  • ルートから www へ: ルートドメイン向けに、192.0.2.0 を指すプロキシ済み DNS A レコード、または 100:: を指すプロキシ済み AAAA レコードを追加します

ルートから移行する

現在、/* 付きの ルート で Worker を呼び出していて、100:: などを指す CNAME レコードがある場合、カスタムドメインへの置き換えを推奨します。

ダッシュボードでルートから移行する

ルート example.com/* を移行するには、次の手順を行います。

  1. Cloudflare ダッシュボードで、ドメインの DNS Records ページを開きます。

    Records を開く ↗
  2. example.com の CNAME レコードを削除します。

  3. Account Home > Workers & Pages を開きます。

  4. Overview で Worker を選び、Settings > Domains & Routes を開きます。

  5. Add > Custom domain を選び、example.com を追加します。

  6. Worker の Settings > Domains & Routes にあるルート example.com/* を削除します。

Wrangler でルートから移行する

Wrangler 設定ファイル のルート example.com/* を移行するには、次の手順を行います。

  1. Cloudflare ダッシュボードで、ドメインの DNS Records ページを開きます。

    Records を開く ↗
  2. example.com の CNAME レコードを削除します。

  3. Wrangler ファイルに次を追加します。

    {
      "routes": [
        {
          "pattern": "example.com",
          "custom_domain": true
        }
      ]
    }
    [[routes]]
    pattern = "example.com"
    custom_domain = true
  4. npx wrangler deploy を実行し、Worker が動作するカスタムドメインを作成します。

役に立ちましたか?