Skip to content

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

ルート

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

背景

ルートは、URL パターンを Worker に割り当てます。指定した URL パターンに一致するリクエストが Cloudflare のネットワークに届くと、そのルートで Worker が実行されます。

ルートは、リクエストの URL に対して評価される一連のルールです。常に通信する専用のアプリケーションサーバーがある場合に、ルートの利用をおすすめします。受信した Request オブジェクトに対して fetch() を呼ぶと、Cloudflare ゾーンの DNS 設定で定義したアプリケーションサーバーへのサブリクエストが走ります。

ルートは、既存のプロキシ済みホスト名に、アプリケーションサーバーの前段として Workers の機能を足します。Worker をプロキシとして動かし、Cloudflare の背後にあるアプリケーションサーバーへ到達する前に必要な処理を行えます。

ルートは、Cloudflare DNS で定義したアプリケーションと連携します

ルートは Custom Domains を fetch() でき、同じホスト名に設定されている場合はルートが優先されます。たとえばアプリケーションの前段でログ用 Worker を動かしたい場合、アプリケーション Worker に app.example.com の Custom Domain を作り、ログ用 Worker に app.example.com/* のルートを作ります。fetch() を呼ぶと、Custom Domain 上のアプリケーション Worker が呼び出されます。なお、ルートは同一ゾーンの fetch() の対象にはできません。

ルートを設定する

ルートを追加するには、次が必要です。

  1. 有効な Cloudflare ゾーン
  2. 呼び出す Worker。
  3. ルーティング先にしたい、Cloudflare がプロキシする(オレンジクラウドドメイン または サブドメイン の DNS レコード。

Worker がアプリケーションのオリジンでない場合は、次の手順でルートを設定します。

ダッシュボードでルートを設定する

ルートを設定する前に、ルーティング先にしたい ドメイン または サブドメイン の DNS レコードがあることを確認します。

ダッシュボードでルートを設定するには:

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

    Workers & Pages を開く ↗
  2. 概要 で Worker を選択します。

  3. 設定 > ドメインとルート > 追加 > ルート に進みます。

  4. ゾーンを選び、ルートパターンを入力します。

  5. ルートを追加 を選択します。

Wrangler 設定ファイルでルートを設定する

ルートを設定する前に、ルーティング先にしたい ドメイン または サブドメイン の DNS レコードがあることを確認します。

Wrangler 設定ファイル でルートを設定するには、次の例を参照してください。

{
	"routes": [
		{
			"pattern": "subdomain.example.com/*",
			"zone_name": "example.com"
		},
		// or
		{
			"pattern": "subdomain.example.com/*",
			"zone_id": "<YOUR_ZONE_ID>"
		}
	]
}
[[routes]]
pattern = "subdomain.example.com/*"
zone_name = "example.com"

[[routes]]
pattern = "subdomain.example.com/*"
zone_id = "<YOUR_ZONE_ID>"

各ルートのあとに zone_name または zone_id オプションを追加します。zone_namezone_id は入れ替えできます。zone_id を使う場合、ゾーン ID は次の手順で確認します。

  1. Cloudflare ダッシュボードでゾーンの概要ページを開きます。

    Overview を開く ↗
  2. 概要 の左側で ゾーン ID を探します。

複数のルートを追加するには:

{
	"routes": [
		{
			"pattern": "subdomain.example.com/*",
			"zone_name": "example.com"
		},
		{
			"pattern": "subdomain-two.example.com/example",
			"zone_id": "<YOUR_ZONE_ID>"
		}
	]
}
[[routes]]
pattern = "subdomain.example.com/*"
zone_name = "example.com"

[[routes]]
pattern = "subdomain-two.example.com/example"
zone_id = "<YOUR_ZONE_ID>"

マッチングの挙動

ルートパターンは次のような形です。

https://*.example.com/images/*

このパターンは、example.com のサブホスト宛てで、パスが /images/ で始まるすべての HTTPS リクエストに一致します。

すべてのリクエストに一致するパターンは次のとおりです。

*example.com/*

正規表現 に似て見えますが、ルートパターンには次のルールがあります。

  • 使える演算子はワイルドカード(*)だけです。任意の文字の 0 個以上に一致します。

  • ルートパターンに中置ワイルドカードやクエリパラメータは使えません。たとえば example.com/*.jpgexample.com/?foo=* も無効です。

  • 複数のルートパターンがリクエスト URL に一致しうる場合、いちばん具体的なパターンが勝ちます。たとえば https://www.example.com/ へのリクエストでは、www.example.com/**.example.com/* より優先されます。example.com/hello/world へのリクエストでは、example.com/hello/*example.com/* より優先されます。

  • ルートパターンのマッチングは、クエリパラメータ文字列を含むリクエスト URL 全体を見ます。ルートパターンにクエリパラメータは書けないため、クエリ付き URL に一致させるには、パターンをワイルドカード * で終える必要があります。

  • ルートパターンのパス部分は大文字と小文字を区別します。たとえば example.com/Images/*example.com/images/* は別のルートです。

  • 2023 年 10 月 15 日より前に作ったルートでは、ホスト部分も大文字と小文字を区別します。たとえば example.com/*Example.com/* は別のルートです。

  • 2023 年 10 月 15 日以降に作ったルートでは、ホスト部分は大文字と小文字を区別しません。たとえば example.com/*Example.com/* は同じルートです。

Worker に紐づけずにルートを指定できます。より具体性の低いパターンを打ち消します。たとえば、Workers スクリプトがあるパターンとないパターンの組を考えます。

*example.com/images/cat.png -> <no script>
*example.com/images/*       -> worker-script

この例では、example.com 宛てでパスが /images/ で始まるリクエストは worker-script にルーティングされます。ただし /images/cat.png は例外で、Workers を完全にバイパスします。パスが /images/cat.png?foo=bar のリクエストは、クエリ文字列があるため worker-script にルーティングされます。

有効性

ルートパターンの有効性は、次のルールで決まります。

ルートパターンにはゾーンを含める

ゾーンが example.com なら、いちばん単純なルートパターンは example.com です。これは http://example.com/https://example.com/ にだけ一致します。URL と同様、パスを省略すると / が暗黙的に付きます。

ルートパターンにクエリパラメータは書けない

たとえば https://example.com/?anything は無効なルートパターンです。

ルートパターンは任意で http:// または https:// で始められる

スキームを省略すると、http://https:// の両方に一致します。http:// または https:// を付けると、それぞれ HTTP または HTTPS のリクエストにだけ一致します。

  • https://*.example.com/https://www.example.com/ に一致し、http://www.example.com/ には一致しません。

  • *.example.com/https://www.example.com/http://www.example.com/ の両方に一致します。

ホスト名は任意で * で始められる

ルートパターンのホスト名が * で始まる場合、そのホストとすべてのサブホストに一致します。*. で始まる場合は、すべてのサブホストにだけ一致します。

  • *example.com/https://example.com/https://www.example.com/ に一致します。

  • *.example.com/https://www.example.com/ に一致し、https://example.com/ には一致しません。

次の例は、*example.com/**.example.com/* の違いです。

リクエスト URL *example.com/* *.example.com/*
https://example.com/ 一致する 一致しない
https://www.example.com/path 一致する 一致する
https://myexample.com/ 一致する 一致しない
https://not-example.com/ 一致しない 一致しない

パスは任意で * で終えられる

ルートパターンのパスが * で終わる場合、そのパスのすべての接尾辞に一致します。

  • https://example.com/path*https://example.com/pathhttps://example.com/path2https://example.com/path/readme.txt に一致します。

ドメインとサブドメインには DNS レコードが必要

すべてのドメインとサブドメインに DNS レコード がないと、Cloudflare でプロキシして Worker を呼び出せません。たとえば myname.example.com に Worker を置きたいのに、example.com は Cloudflare に追加済みでも myname.example.com の DNS レコードがない場合、myname.example.com へのリクエストは ERR_NAME_NOT_RESOLVED になります。

役に立ちましたか?