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

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

最終更新日:Jun 05, 2026

カスタムドメインを介して 関数と Pages にアクセスするには、エントリポイントとしてドメイン名を設定します。Edge Security Acceleration (ESA) は、HTTP/HTTPS リクエストを 関数と Pages に転送するために、ドメイン名の関連付け と ルート の 2 つのメソッドを提供します。

前提条件

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

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

設定メソッドの選択

image

機能

ドメイン名の関連付け

ルート

主な目的

api.example.com などの指定されたドメインからすべてのリクエストを、単一の関数と Pages インスタンスに転送します。

事前定義されたパスに一致するリクエスト (example.com/api/* など) のみを 関数と Pages にルーティングします。その他のリクエストは影響を受けません。

スコープ

ドメインのすべてのトラフィック。

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

設定

シンプルで、ワンステップのプロセスです。

柔軟です。一致ルールの設定が必要です。

利用シーン

  • 専用の API ゲートウェイ関数。

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

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

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

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

カスタムドメインのバインド

ドメイン名の関連付け を使用して、ドメインからのすべてのトラフィックを単一の 関数と Pages インスタンスに転送します。

関数と Pages をサイトドメインにリンクします。バインド後、カスタムドメインを介して 関数と Pages にアクセスします。関数と Pages にバインドされるドメインは、利用可能なサイトに属している必要があります。ESA は、バインドされたドメインの DNS レコードを自動的に追加します。

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

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

  3. お使いの 関数と Pages インスタンスに関連付けるドメイン名 (pages.example.com など) を入力します。 ESA は、対応するサイトにそのドメインの DNS レコードを自動的に作成します。

    説明

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

    image

  4. サイトの接続メソッドに基づいて、次のステップを完了します。

    NS レコード

    サイトでNS レコードを使用している場合は、DNS レコードが反映されるまで約 1 分間待ちます。 その後、ブラウザを開き、pages.example.com などのカスタムドメインにアクセスして結果を確認します。image

    CNAME レコード

    サイトで CNAME レコードを使用している場合は、DNS プロバイダーで CNAME レコードを追加してドメインをアクティブ化します。

    1. カスタムドメインのリストで、新しいドメインを見つけて DNS レコードの表示 をクリックします。

      image

    2. ESA が生成した CNAME 値をコピーします。

      image

    3. DNS プロバイダーのウェブサイトに移動し、次の情報で CNAME レコードを追加します:

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

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

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

      image

    4. ESA コンソールに戻り、CNAME のステータス が 設定済み と表示されるまで待ちます。imageその後、ブラウザで pages.example.com のような、先ほどバインドしたカスタムドメインにアクセスすると、ページを表示できます。image

ルートの設定

特定の URL パスに一致するリクエストを 関数と Pages インスタンスにルーティングして、詳細なトラフィックコントロールを行います。一致するリクエストは 関数と Pages によって処理され、一致しないリクエストは標準の ESA 高速化およびキャッシュフローを経由します。たとえば、example.com サイトの example.com/a* のルートは、/a、/a1、および /a2 へのリクエストを 関数と Pages に送信しますが、/b、/c、および /d へのリクエストはオリジンまたはキャッシュに送信されます。

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

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

  3. ルート名 を入力し、サイトの選択 リストから、example.com などの対象のサイトを選択します。

  4. ルートモード を選択します。

    1. シンプルモード: URL (ホスト名とパス) のみに基づいてリクエストを照合します。 たとえば、URL プレフィックス pages.example.com を持つすべてのリクエストを 関数と Pages インスタンスにルーティングするルールを設定できます。image

    2. カスタムモード: リクエストヘッダー、 Cookie、リクエストメソッドなどの複数の条件を組み合わせて複雑なマッチングを行い、条件間の論理関係 (すべて/いずれか) を設定します。たとえば、Hostname が www.example.com であり、かつ User-Agent リクエストヘッダーに Mobile が含まれる場合にのみ、リクエストを 関数と Pages に転送します:image

  5. ブラウザで、ルートに一致する URL にアクセスして結果を確認します。

    image

重要
  • [基本モード] を使用し、*.example.com や www.example.com などのプレフィックス付きのドメインを入力する場合、対応する DNS レコードが ESA コンソールに存在しているか、レコードを手動で追加する必要があります。そうしないと、ドメインへのリクエストは失敗します。

  • 複数のルートがある場合、上から下の順に評価されます。最初に一致したルートが適用され、他のすべてのルートは無視されます。

一致ルール

  • ルートには、ホスト名とパスの両方が含まれている必要があります。/path のような、パスのみのルートはサポートされていません。

  • ルートの先頭または末尾にワイルドカード * を追加すると、より多くのリクエストに一致させることができます。ワイルドカード * は、0 文字以上の文字に一致します。たとえば、example.com/* は example.com へのすべてのリクエストに一致します。

  • ルートはケースセンシティブです。例えば、example.com/a と example.com/A は 2 つの異なるルートです。

  • ワイルドカード (*) はパスの途中に含めることはできず、パターンではクエリパラメーターはサポートされていません。たとえば、example.com/*/path や example.com/path?param=1 のようなパターンは無効です。

  • リクエストが複数のルートに一致する場合、リストの最初に一致したルートが優先されます。

バイパスモード

ルートで [バイパスモード] を有効にすると、一致するリクエストがサブリクエストとして 関数と Pages サービスに送信されます。このモードは、オリジンへのメインリクエストフローを中断することなく、認証やログ記録に使用します:

  1. クライアントが ESA のエッジノード (POP) にリクエストを送信します。

  2. リクエストはルートに一致すると、関数と Pages に転送され、ロギングや認証などの操作が行われます。バイパスモードでは、リクエストボディは 関数と Pages には転送されません。

  3. 関数と Pages が 200 状態コードを返した場合、リクエストは次のステップに進みます。それ以外の状態コードを返した場合、ESA は処理を停止し、クライアントに 403 状態コードを返します。

  4. リクエストは標準の ESA フローに進み、キャッシュポリシーと照合されるか、オリジンサーバーに転送されます。

  5. キャッシュヒットまたはオリジンサーバーからの応答が ESA ノードに返されます。この時点で、応答は 関数と Pages によって処理されなくなります。

  6. 応答がクライアントに送信されます。

利用シーン

  • ログ記録:バイパスモードを使用して、特定のリクエストを 関数と Pages に転送し、関数内でカスタムのログ記録ロジックを定義します。

  • 大容量ファイルのダウンロードの認証:大きな応答を関数経由で転送すると、多くの CPU 時間を消費し、コストが増加します。バイパスモードを使用して、まず 関数と 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 を選択します。対象の 関数と Pages インスタンスをクリックします。

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

  3. ドメイン名 タブでは、カスタムドメインを 削除 できます。ルートについては、編集 または 削除 できます。