すべてのプロダクト
Search
ドキュメントセンター

Edge Security Acceleration:ドメイン名の設定

最終更新日:Mar 01, 2026

ドメイン名をトリガーとして設定し、カスタム公開パス経由で Functions and Pages にアクセスできます。Edge Security Acceleration (ESA) は、HTTP または HTTPS リクエストを Functions and Pages サービスに転送するために、ドメイン名の関連付けルート の 2 つのメソッドを提供します。

事前準備

ドメイン名の関連付けルート の両方で、アカウントにアクティブなサイトが必要です。

アクティブなサイトとは、プランを購入済みで、NS レコードまたは CNAME レコードを使用して接続されているサイトのことです。

適切な設定方法の選択

image

属性

ドメイン名の関連付け

ルート

主な目的

api.example.com などの指定されたドメイン名からのすべてのリクエストを、同じ Functions and Pages に転送して処理します。

特定のドメイン名配下で、example.com/api/* のような事前設定されたパスに一致するリクエストのみを Functions and Pages にルーティングして処理します。他のパスへのリクエストは影響を受けません。

スコープ

ドメイン名配下のすべてのトラフィック

ルールに一致する一部のトラフィック

設定方法

シンプル、ワンステップ設定

柔軟。マッチングルールの設定が必要。

利用シーン

  • 専用の API Gateway 機能

  • 完全なサーバーサイドレンダリング (SSR) アプリケーション

  • 特定の API パスの認証またはログ記録

  • 特定のページパスに対する A/B テストの実装

  • 特定のリクエストをインターセプトし、カスタムコンテンツを返す

ドメインバインディングの使用

ドメイン名の関連付け を使用して、ドメイン名からのすべてのトラフィックを特定の Functions and Pages サービスに転送して処理します。

ドメインバインディング機能を使用すると、Functions and Pages サービスをご利用サイトのドメイン名にリンクできます。ドメイン名がバインドされると、それを使用して Functions and Pages サービスに直接アクセスできます。Functions and Pages サービスにバインドされるドメイン名は、アクティブなサイトに属している必要があります。コンソールでバインディングを設定すると、ESA はバインドされたドメイン名の DNS レコードをサイトに自動的に追加します。

image
  1. ESA コンソールにログインします。左側のナビゲーションウィンドウで、エッジコンピューティング > Functions and Pages を選択します。設定する Functions and Pages サービスをクリックします。

  2. [ドメイン] タブをクリックします。ドメイン名の関連付け セクションで、ドメイン名を追加 をクリックします。image

  3. Functions and Pages サービスにバインドするドメイン名 (例: pages.example.com) を入力します。ドメイン名が追加されると、対応するサイトに新しい DNS レコードが作成されます。

    説明

    新しいドメイン名は、そのサイトの設定を継承します。サイトに SSL/TLS 証明書がない場合、バインドされたドメイン名は HTTPS 経由でアクセスできません。サイトで SSL/TLS を有効にする方法の詳細については、「SSL/TLS」をご参照ください。

    image

  4. ご利用サイトの接続タイプに対応する手順に従います:

    NS 設定を使用して接続されたサイト

    ご利用のサイトが NS レコードを使用して接続されている場合は、DNS レコードが有効になるまで待ちます。このプロセスには約 1 分かかります。その後、新しくバインドされたカスタムドメイン名 (例: pages.example.com) にブラウザでアクセスして結果を表示します。image

    CNAME 設定を使用して接続されたサイト

    ご利用のサイトが CNAME レコードを使用して接続されている場合は、バインディングを有効にするために、DNS プロバイダーで CNAME レコードを設定する必要があります。

    1. 新しく追加したカスタムドメイン名の右側にある DNS レコードの表示 をクリックします。

      image

    2. ESA が新しい DNS レコード用に生成した CNAME 値をコピーします。

      image

    3. DNS プロバイダーに移動し、ドメイン名の DNS 設定に CNAME レコードを追加します:

      • ホストレコード:カスタムドメイン名のプレフィックスを入力します。この例では、pages と入力します。

      • レコードタイプCNAME を選択します。

      • レコード値:前のステップでコピーした CNAME 値を貼り付けます。

      image

    4. ESA コンソールに戻ります。CNAME のステータス設定済み に変わるまで待ちます。imageその後、新しくバインドされたカスタムドメイン名 (例: pages.example.com) にブラウザでアクセスして結果を表示します。image

ルーティング設定の使用

ルーティングを使用して、特定の URL パスへのリクエストを Functions and Pages サービスに転送できます。このメソッドは、詳細なトラフィックシェーピングを提供します。リクエストが設定された URL パターンに一致する場合、Functions and Pages サービスがそれを処理します。それ以外の場合、リクエストは ESA の高速化された back-to-origin プロセスを続行します。たとえば、example.com サイトにルーティングルール example.com/a* を設定した場合、/a/a1/a2 などの一致するパスへのすべてのリクエストは、Functions and Pages サービスによって処理されます。/b/c/d などの一致しないパスへのリクエストは、標準の back-to-origin またはキャッシュプロセスに従います。

image
  1. ESA コンソールにログインします。左側のナビゲーションウィンドウで、エッジコンピューティング > Functions and Pages を選択します。設定する Functions and Pages サービスをクリックします。

  2. [ドメイン] タブをクリックします。ルート セクションで、ルートを追加 をクリックします。image

  3. [ルーティング名] を入力します。[サイトの選択] リストで、ターゲットサイト (例: example.com) を選択します。

  4. 選択する[ルーティングパターン]

    1. [基本モード]:このパターンは、ホスト名とパスを含む URL のみに基づいてリクエストを照合します。たとえば、URL プレフィックスが pages.example.com のすべてのリクエストを Functions and Pages サービスにルーティングするように設定できます:image

    2. カスタムパターン: このパターンは、リクエストヘッダー、Cookie、リクエストメソッドなど、複数の条件に基づく複雑な論理マッチングを必要とするシナリオに適しています。複数のマッチング条件を追加し、それらの間の論理関係を「すべての条件を満たす」または「いずれかの条件を満たす」として指定することができます。たとえば、hostnamewww.example.com と等しく、かつ User-Agent リクエストヘッダーに Mobile が含まれる場合にのみ、リクエストを 関数とページ サービスに転送するルールを設定できます:image

  5. ブラウザで一致するルーティングパスにアクセスして、結果を表示します。

    image

重要
  • 基本モードを使用し、*.example.comwww.example.com のようなプレフィックス付きのドメイン名を入力する場合、ESA コンソールの DNS レコードセクションに対応するレコードが存在する必要があります。手動でレコードを追加することもできます。そうしないと、ドメイン名へのアクセスは失敗します。

  • 複数のルーティングルールが設定されている場合、それらは上から下に順次照合されます。一致が見つかると、後続のルールはチェックされません。

マッチングルール

  • ルーティング設定には、ドメインのホスト名とパス URI の両方を含める必要があります。したがって、/path のようなパス URI のみを含むルーティングルールは設定できません。

  • ルーティング設定の先頭または末尾にワイルドカード文字 (*) を追加して、より多くのリクエストを照合できます。ワイルドカード文字 * は、0 個以上の任意の文字に一致します。たとえば、example.com/*example.com へのすべてのリクエストに一致します。

  • ルーティング設定では大文字と小文字が区別されます。たとえば、example.com/aexample.com/A は 2 つの異なるルーティングルールです。

  • ルーティング設定では、パスの途中やパラメーターにワイルドカード文字 (*) を使用することはサポートされていません。たとえば、example.com/*/pathexample.com/path?param=1 は許可されません。

  • リクエストが複数のルーティングルールに一致する場合、リストの最初のマッチングルールが優先されます。

バイパスモード

ルーティングルールのバイパスモードを有効にすると、リクエストがルーティングポリシーに一致したときに、リクエストはサブリクエストとして Functions and Pages サービスに送信されます。バイパスモードの全体的なプロセスは次のとおりです:

imageimage
  1. クライアントが ESA の POP (Point of Presence) にリクエストを送信します。

  2. リクエストはルーティングポリシーに一致し、処理のために Functions and Pages サービスに転送されます。Functions and Pages サービスでは、リクエストの内容に基づいてログ記録や認証などの操作を実行できます。バイパスモードが有効な場合、リクエストボディは Functions and Pages サービスに転送されないことに注意してください。

  3. Functions and Pages サービスからのレスポンスのステータスコードが 200 の場合、リクエストは次の処理ステップに進みます。ステータスコードが 200 でない場合、ESA はリクエストを中止し、クライアントに 403 ステータスコードを返します。

  4. その後、リクエストは後続のポリシーと照合され、ESA のキャッシュマッチングまたは高速化された back-to-origin ロジックを経て処理されます。

  5. キャッシュヒットまたはオリジンサーバーからのレスポンスが ESA の POP に返されます。この時点で、レスポンスは Functions and Pages サービスによって処理されなくなります。

  6. レスポンスはクライアントに転送されます。

一般的な利用シーン

  • ログ記録:一部のリクエストのログを生成したい場合、リクエストをバイパスモードで Functions and Pages サービスに転送し、関数内でカスタムのログ記録ロジックを定義できます。

  • 大容量ファイルのダウンロード認証:エッジ関数がクライアントにレスポンスを転送する際、CPU 時間を消費します。レスポンスが大きすぎると、CPU タイムスライスの上限を超え、追加コストが発生する可能性があります。バイパスモードを使用して Functions and Pages サービスで認証を行うことで、これらの問題を回避できます。

よくある質問

バイパスモード用にコードを変更する方法

例として、タイプ A の URL 署名を取り上げます:

  • エントリ関数を async fetch() から async bypass() に変更します。

  • 関数の戻り値は new ResponseBypass() を使用して構築する必要があります。このコンストラクターは 2 つのパラメーターを取ります:

    • 最初のパラメーターは `true` または `false` で、認証が成功したか失敗したかを示します。

    • 最初のパラメーターが `false` の場合、2 番目のパラメーター `status` を渡して、クライアントに返されるステータスコードを指定できます。

元のタイプ A 署名のコード例

import { createHash } from "node:crypto";

async function handleRequest(request) {
  const url = new URL(request.url);
  const path = url.pathname;
  const delta = 3600;

  const authKeyTypeA = url.searchParams.get('auth_key');

  const privateKey = 'your_secret_key'
  const currentTimestamp = Math.floor(Date.now() / 1000);

  if (!authKeyTypeA) {
    // 認証失敗。エッジはデフォルトでクライアントに 403 ステータスコードを返します。
    return new Response('Unauthorized', { 
      status: 401,
    });
  }

  const [timestamp, rand, uid, signature] = authKeyTypeA.split('-');

  if (currentTimestamp > parseInt(timestamp)+ delta) {
    // 認証失敗。エッジはデフォルトでクライアントに 403 ステータスコードを返します。
    return new Response('Link expired', {
      status: 403,
    });
  }

  const signString = [path, timestamp, rand, uid, privateKey].join('-');

  const md5 = createHash('md5').update(signString).digest('hex');

  if (md5 !== signature) {
  
    return new Response('Unauthorized', {
      status: 401
    });
  }

  // リソースが別のドメイン名にある場合は、リクエストを送信してレスポンスを返します。
  // const yourUrl = `https://your-dcdn-domain.com${path}${url.search}`
  // const cdnResponse = await fetch(yourUrl, request)
  // return new Response(cdnResponse.body, cdnResponse)

  // ほとんどの場合、オリジンからフェッチするだけで十分です。
  return fetch(request.url)
}

export default {
  async fetch(request) {
    return handleRequest(request)
  }
}

バイパスモードを使用したタイプ A 署名のコード例

import { createHash } from "node:crypto";

async function handleRequest(request) {
  const url = new URL(request.url);
  const path = url.pathname;
  const delta = 3600;

  const authKeyTypeA = url.searchParams.get("auth_key");

  const privateKey = "your_secret_key";
  const currentTimestamp = Math.floor(Date.now() / 1000);

  if (!authKeyTypeA) {
    // 認証失敗。false を渡します。エッジはデフォルトでクライアントに 403 ステータスコードを返します。
    return new ResponseBypass(false, {
      status: 401,
    });
  }

  const [timestamp, rand, uid, signature] = authKeyTypeA.split("-");

  if (currentTimestamp > parseInt(timestamp) + delta) {
    // 認証失敗。false を渡します。エッジはデフォルトでクライアントに 403 ステータスコードを返します。
    return new ResponseBypass(false, {
      status: 403,
    });
  }

  const signString = [path, timestamp, rand, uid, privateKey].join("-");

  const md5 = createHash("md5").update(signString).digest("hex");

  if (md5 !== signature) {
    // 認証失敗。false を渡します。エッジはデフォルトでクライアントに 403 ステータスコードを返します。
    return new ResponseBypass(false, {
      status: 401,
    });
  }

  // 認証成功。true を渡します。リクエストはオリジンに続行され、レスポンスは関数によって処理されなくなります。
  const resSuccess = new ResponseBypass(true);
  return resSuccess;
}

export default {
  async bypass(request) {
    return handleRequest(request);
  },
};

ドメイン名バインディングを変更する方法

現在のドメイン名バインディングとルーティングルールがビジネスニーズを満たさない場合は、それらを編集または削除できます。

  1. ESA コンソールにログインします。左側のナビゲーションウィンドウで、エッジコンピューティング > Functions and Pages を選択します。変更する Functions and Pages サービスをクリックします。

  2. [ドメイン名] タブをクリックします。

  3. [ドメイン] ページで、ドメイン名バインディングを 削除 したり、ルーティングルールを 編集 または 削除 したりできます。