Cloudflare で特定のパスだけ別のサーバーへアクセスさせる方法(Enterprise 編)
ウィスキー、シガー、パイプをこよなく愛する大栗です。
Cloudflare の Application Service(CDN)で特定のパスだけ別サーバーへアクセスを振り分けたいというときの設定方法についてまとめてみます。
やりたいこと
Cloudflare に example.com のゾーンを作成しており、以下のドメインがあるとします。
- サービスドメイン : www.example.com (Cloudflare 管理ドメイン)
- オリジンドメイン1 : org1.example.net (外部ドメイン)
- オリジンドメイン2 : org2.example.net (外部ドメイン)
- デフォルトルーティング
通常はオリジンドメイン1(org1.example.net)へ転送します。
- 特定パスのルーティング
リクエストパスが /other-domain/ で始まる場合はオリジンドメイン2(org2.example.net)へ転送します。オリジンドメイン2 へのリクエストパスは先頭の /other-domain/ を削除します。
例えば以下のように転送します。
- デフォルトルーティング
https://www.example.com/index.html->https://org1.example.net/index.html
- 特定パスのルーティング
https://www.example.com/other-domain/test->https://org2.example.net/test
設定概要
すでに、サービスドメイン(www.example.com)をオリジンドメイン1(org1.example.net)へ転送する設定は実施済みの前提とします。
必要な設定は、1. 特定パスの場合に別ドメインへ転送する、2. 別ドメインに転送するときにパスを変換する、の2個を設定する必要があります。
- 別ドメインに転送するときにパスを変換する
パスを変換するには、Transform Rule で URL リライトルールを設定します。
- 特定パスの場合に別ドメインへ転送する
別ドメインへ転送するには、Origin Rule で DNS レコードとホスト ヘッダー[1]を書き換えます。なお Origin Rule で宛先ポート以外(DNS レコード、Server Name Indication、ホスト ヘッダー、)を書き換えるには Enterprise Plan が必要となります。
Transform Rule の URL リライトと Origin Rule の設定が必要となります。適用される順番は URL リライトが先であるため、/other-domain/ を削除したパスは /* とすべてのパスになってしまいます。そのため Origin Rule でそのまま判定してしまうと対象外のリクエストまで別ドメインに転送してしまうので、設定方法に注意が必要です。

Origin Rule にはもう一つ注意が必要な設定があります。オリジンを変更する DNS レコードは、同一の Cloudflare アカウントで管理しているドメインでなければなりません。そのため org2.example.com のようなダミーのドメインを DNS のみで登録します。
やってみる
Cloudflare のコンソールから設定を行っていきます。
DNS レコードの作成
ダミーとしての org2.example.com ドメインの DNS レコードを作成します。以下の内容を設定して 保存 をクリックします。
| 項目 | 設定値 | 備考 |
|---|---|---|
| タイプ | CNAME | |
| 名前 | org2 | 内部的に使用するドメイン |
| ターゲット | org2.example.net | オリジンドメイン2を設定する |
| プロキシ ステータス | DNS のみ |

URL リライトの設定
ルールの概要ページを開き、ルールを作成 から URL 書き換えルール をクリックします。

URL リライト行う条件は以下の内容を設定します。
| 項目 | 設定値 | 備考 |
|---|---|---|
| ルール名 | <任意> | ここでは Rewrite-1 としています |
| 受信リクエストが一致する場合… | ワイルドカード パターン | |
| リクエスト URL | https://www.example.com/other-domain/* |

実行するアクションに以下の内容を設定して、デプロイ をクリックします。
| 項目 | 設定値 | 備考 |
|---|---|---|
| ターゲット パス | other-domain/* | |
| 書き換え先 | ${1} |

Origin Rule の設定
ルールの概要ページを開き、ルールを作成 から オリジン ルール をクリックします。

受信リクエストが一致する場合で カスタム フィルタ式 を選択したあとに 式を編集 をクリックして条件の式を直接編集します。これは、Web サーバーが受信した変換される前の 完全 URI は式ビルダーで選択できないためです。Web サーバーが受信した変換される前の値は、raw. から始まる変数です。
式を以下のように記述します。
(raw.http.request.full_uri wildcard "https://www.example.com/other-domain/*")

実行するアクションに以下の内容を設定して、デプロイ をクリックします。
| 項目 | 設定値 | 備考 |
|---|---|---|
| ホスト ヘッダー | org2.example.net | 書き換え先を選択して、オリジンドメイン2を入力します |
| Server Name Indication (SNI) | 保持 | |
| DNS レコード | org2.example.com | 上書き先を選択して、ダミーのドメインを入力します |
| 宛先ポート | 保持 |

動作確認
アカウント ホームから Trace を使用します。Trace の画面から トレースの開始 をクリックします。

URL に確認する URL を入力して トレースの送信 をクリックしてチェックします。

https://www.example.com/test の場合はルールに一致せずに、デフォルトのルーティングとなります。

https://www.example.com/other-domain/ や https://www.example.com/other-domain/test といった URL では作成した Transform Rule や Origin Rule に一致します。

実際にアクセスして、アクセスログも確認してみます。
https://www.example.com/ と https://www.example.com/test にアクセスすると、オリジンドメイン1側のアクセスログで以下のように出力されます。
192.0.2.1 - - [05/Nov/2025:11:23:58 +0000] "GET / HTTP/1.1" 200 1826 "www.example.com"
192.0.2.1 - - [05/Nov/2025:11:24:03 +0000] "GET /test HTTP/1.1" 200 14 "www.example.com"
https://www.example.com/other-domain/ と https://www.example.com/other-domain/test にアクセスすると、オリジンドメイン2側のアクセスログで以下のように出力されます。
192.0.2.1 - - [05/Nov/2025:11:25:02 +0000] "GET / HTTP/1.1" 200 1826 "-" "org2.example.net"
192.0.2.1 - - [05/Nov/2025:11:25:27 +0000] "GET /test HTTP/1.1" 200 14 "-" "org2.example.net"
これで、特定のパスによって別ドメインのサーバーへ転送を行えるようになりました。
さいごに
Cloudflare は、以前は Page Rule で各種ルールをまとめて記述していたので、ルールの適用順序などを考える必要はありませんでした。しかし、現在はルールをシンプルに記述するために、Configuration Rule、Transform Rule、Origin Rule、Compression Rule、Cache Rule など別々のルールとして設定します。そのためルールの適用順序を意識してルール設定を行いましょう。
オリジンドメイン2のサーバーがサービスドメインのリクエストを受け付けられる場合にはホスト ヘッダーの書き換えは不要です。 ↩︎







