ルートは、URL パターンを Worker に割り当てます。指定した URL パターンに一致するリクエストが Cloudflare のネットワークに届くと、そのルートで Worker が実行されます。
ルートは、リクエストの URL に対して評価される一連のルールです。常に通信する専用のアプリケーションサーバーがある場合に、ルートの利用をおすすめします。受信した Request オブジェクトに対して fetch() を呼ぶと、Cloudflare ゾーンの DNS 設定で定義したアプリケーションサーバーへのサブリクエストが走ります。
ルートは、既存のプロキシ済みホスト名に、アプリケーションサーバーの前段として Workers の機能を足します。Worker をプロキシとして動かし、Cloudflare の背後にあるアプリケーションサーバーへ到達する前に必要な処理を行えます。
ルートは Custom Domains を fetch() でき、同じホスト名に設定されている場合はルートが優先されます。たとえばアプリケーションの前段でログ用 Worker を動かしたい場合、アプリケーション Worker に app.example.com の Custom Domain を作り、ログ用 Worker に app.example.com/* のルートを作ります。fetch() を呼ぶと、Custom Domain 上のアプリケーション Worker が呼び出されます。なお、ルートは同一ゾーンの fetch() の対象にはできません。
ルートを追加するには、次が必要です。
- 有効な Cloudflare ゾーン。
- 呼び出す Worker。
- ルーティング先にしたい、Cloudflare がプロキシする(オレンジクラウド)ドメイン または サブドメイン の DNS レコード。
Worker がアプリケーションのオリジンでない場合は、次の手順でルートを設定します。
ルートを設定する前に、ルーティング先にしたい ドメイン または サブドメイン の DNS レコードがあることを確認します。
ダッシュボードでルートを設定するには:
-
Cloudflare ダッシュボードで Workers & Pages ページを開きます。
Workers & Pages を開く ↗ -
概要 で Worker を選択します。
-
設定 > ドメインとルート > 追加 > ルート に進みます。
-
ゾーンを選び、ルートパターンを入力します。
-
ルートを追加 を選択します。
ルートを設定する前に、ルーティング先にしたい ドメイン または サブドメイン の 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_name と zone_id は入れ替えできます。zone_id を使う場合、ゾーン ID は次の手順で確認します。
-
Cloudflare ダッシュボードでゾーンの概要ページを開きます。
Overview を開く ↗ -
概要 の左側で ゾーン 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/*.jpgもexample.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 のリクエストにだけ一致します。
-
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/path、https://example.com/path2、https://example.com/path/readme.txtに一致します。
すべてのドメインとサブドメインに DNS レコード がないと、Cloudflare でプロキシして Worker を呼び出せません。たとえば myname.example.com に Worker を置きたいのに、example.com は Cloudflare に追加済みでも myname.example.com の DNS レコードがない場合、myname.example.com へのリクエストは ERR_NAME_NOT_RESOLVED になります。