Share via


Azure Content Delivery Network で Web コンテンツの有効期限を管理する

パブリックにアクセス可能な配信元 Web サーバーからのファイルは、それらの有効期間 (TTL) が経過するまで Azure Content Delivery Network でキャッシュできます。 TTL は、配信元サーバーからの HTTP 応答の Cache-Control ヘッダーによって決まります。 この記事では、Microsoft Azure App Service、Azure Cloud Services、ASP.NET アプリケーション、およびインターネット インフォメーション サービス (IIS) サイトでの Web Apps 機能の Cache-Control ヘッダーを設定する方法について説明します。これらはすべて同様に構成されます。 Cache-Control ヘッダーを設定するには、構成ファイルを使用するか、プログラムを使用します。

コンテンツ配信ネットワーク キャッシュ規則を設定して、Azure portal からキャッシュの設定を制御することもできます。 1 つ以上のキャッシュ規則を作成し、それらのキャッシュ動作を [オーバーライド] または [キャッシュのバイパス] に設定すると、この記事で説明されている最初に示されたキャッシュ設定は無視されます。 全般的なキャッシュの概念については、「キャッシュのしくみ」をご覧ください。

ヒント

ファイルに TTL を設定しないことも選択できます。 この場合は、Azure portal でキャッシュ規則を設定していない限り、Azure Content Delivery Network によって既定の 7 日間の TTL が自動的に適用されます。 この既定の TTL は、一般的な Web 配信の最適化に対してのみ適用されます。 大きなファイルの最適化に対する既定の TTL は 1 日、メディア ストリーミングの最適化に対する既定の TTL は 1 年です。

ファイルとその他のリソースへのアクセスを高速化する Azure Content Delivery Network のしくみについて詳しくは、Azure Content Delivery Network の概要に関するページを参照してください。

コンテンツ配信ネットワーク キャッシュ規則を使用したキャッシュ制御ヘッダーの設定

Web サーバーの Cache-Control ヘッダーを設定するための推奨される方法は、Azure Portal でのキャッシュ規則の使用です。 コンテンツ配信ネットワーク キャッシュ規則について詳しくは、「Azure Content Delivery Network のキャッシュ動作をキャッシュ規則で制御する」を参照してください。

Note

キャッシュ規則は、Azure CDN Standard from Edgio プロファイルでのみ使用できます。 Azure CDN Premium from Edgio プロファイルの場合は、同様の機能に対して管理ポータルで Azure Content Delivery Network ルール エンジンを使用する必要があります。

[CDN キャッシュ規則] ページに移動するには:

  1. Azure portal で、コンテンツ配信ネットワーク プロファイルを選び、Web サーバーのエンドポイントを選びます。

  2. 左側のウィンドウの [設定] で、 [キャッシュ規則] を選択します。

    コンテンツ配信ネットワークのキャッシュ規則ボタンのスクリーンショット。

    [キャッシュ規則] ページが表示されます。

    コンテンツ配信ネットワーク キャッシュ ページのスクリーンショット。

グローバル キャッシュ規則を使用して Web サーバーの Cache-Control ヘッダーを設定するには:

  1. [グローバル キャッシュ規則] で、 [クエリ文字列のキャッシュ動作][クエリ文字列を無視] に設定し、 [キャッシュ動作][オーバーライド] に設定します。

  2. [キャッシュの有効期間] として、 [Seconds] (秒) ボックスに「3600」と入力するか、または [時間] ボックスに「1」と入力します。

    コンテンツ配信ネットワークのグローバル キャッシュ規則の例のスクリーンショット。

    このグローバル キャッシュ規則は 1 時間のキャッシュ有効期間を設定し、エンドポイントへのすべての要求に影響を与えます。 これは、エンドポイントで指定された配信元サーバーによって送信されるすべての Cache-Control または Expires HTTP ヘッダーをオーバーライドします。

  3. [保存] を選択します。

カスタム キャッシュ規則を使用して Web サーバー ファイルの Cache-Control ヘッダーを設定するには:

  1. [Custom caching rules] (カスタム キャッシュ規則) で、次の 2 つの一致条件を作成します。

    1. 最初の一致条件では、 [一致条件][パス] に設定し、 [一致する値] として /webfolder1/* を入力します。 [キャッシュ動作][オーバーライド] に設定し、 [日] ボックスに「4」と入力します。

    2. 2 番目の一致条件では、 [一致条件][パス] に設定し、 [一致する値] として /webfolder1/file1.txt を入力します。 [キャッシュ動作][オーバーライド] に設定し、 [日] ボックスに「2」と入力します。

    コンテンツ配信ネットワークのカスタム キャッシュ規則の例のスクリーンショット。

    最初のカスタム キャッシュ規則は、エンドポイントで指定された配信元サーバー上の /webfolder1 フォルダー内のすべてのファイルに対して 4 日間のキャッシュ有効期間を設定します。 2 番目の規則は file1.txt ファイルについてのみ最初の規則をオーバーライドし、そのファイルに対して 2 日間のキャッシュ有効期間を設定します。

  2. [保存] を選択します。

構成ファイルを使用した Cache-Control ヘッダーの設定

画像やスタイル シートなどの静的コンテンツの場合は、Web アプリケーションの applicationHost.config ファイルか Web.config 構成ファイルを変更することで、更新頻度を制御できます。 コンテンツの Cache-Control ヘッダーを設定するには、いずれかのファイル内の <system.webServer>/<staticContent>/<clientCache> 要素を使用します。

ApplicationHost.config ファイルの使用

ApplicationHost.config ファイルは、IIS 構成システムのルート ファイルです。 ApplicationHost.config ファイルの構成設定は、サイト上のすべてのアプリケーションに影響を与えますが、Web アプリケーション用の既存の Web.config ファイルの設定によってオーバーライドされます。

Web.config ファイルの使用

Web.config ファイルの使用では、Web アプリケーション全体、または Web アプリケーション上の特定のディレクトリの動作をカスタマイズできます。 通常、Web アプリケーションのルート フォルダーには、少なくとも 1 つの Web.config ファイルがあります。 特定のフォルダー内の各 Web.config ファイルの構成設定は、別の Web.config ファイルによってサブフォルダー レベルでオーバーライドされない限り、そのフォルダーとそのサブフォルダー内のすべてに影響を与えます。

たとえば、Web アプリケーションのルート フォルダー内の Web.config ファイルに <clientCache> 要素を設定して、Web アプリケーション上のすべての静的なコンテンツを 3 日間キャッシュできます。 また、可変コンテンツ (\frequent など) が含まれるサブフォルダーに Web.config ファイルを追加して、サブフォルダーのコンテンツを 6 時間キャッシュするようにその <clientCache> 要素を設定することもできます。 最終結果として、6 時間だけキャッシュされる \frequent ディレクトリ内のすべてのコンテンツを除き、Web サイト全体にあるそのコンテンツは 3 日間キャッシュされます。

次の XML 構成ファイルの例は、3 日間の最大有効時間を指定するように <clientCache> 要素を設定する方法を示しています。

<configuration>
    <system.webServer>
        <staticContent>
            <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="3.00:00:00" />
        </staticContent>
    </system.webServer>
</configuration>

cacheControlMaxAge 属性を使用するには、cacheControlMode 属性の値を UseMaxAge に設定する必要があります。 この設定により、HTTP ヘッダーとディレクティブ、Cache-Control: max-age=<nnn> が応答に追加されます。 cacheControlMaxAge 属性の期間の値の形式は <days>.<hours>:<min>:<sec> です。 その値は秒に変換され、Cache-Controlmax-age ディレクティブの値として使用されます。 <clientCache> 要素の詳細については、クライアント キャッシュ <clientCache> に関するページを参照してください。

プログラムによる Cache-Control ヘッダーの設定

ASP.NET アプリケーションでは、.NET API の HttpResponse.Cache プロパティを設定することによって、コンテンツ配信ネットワークのキャッシュ動作をプログラムで制御します。 HttpResponse.Cache プロパティの詳細については、HttpResponse.Cache プロパティに関するページと HttpCachePolicy クラスに関するページをご覧ください。

アプリケーションのコンテンツを ASP.NET でプログラムでキャッシュするには、次の手順に従います。

  1. HttpCacheabilityPublic に設定することで、コンテンツをキャッシュ可能とマークします。
  2. 次のいずれかの HttpCachePolicy メソッドを呼び出して、キャッシュ検証を設定します。
    • SetLastModified を呼び出して、Last-Modified ヘッダーのタイムスタンプの値を設定します。
    • SetETag を呼び出して、ETag ヘッダーの値を設定します。
  3. 必要に応じて、SetExpires を呼び出して Expires ヘッダーの値を設定して、キャッシュの有効期間を指定します。 それ以外の場合は、このドキュメントで既に説明した既定のキャッシュのヒューリスティックが適用されます。

たとえば、コンテンツを 1 時間キャッシュするには、次の C# コードを追加します。

// Set the caching parameters.
Response.Cache.SetExpires(DateTime.Now.AddHours(1));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetLastModified(DateTime.Now);

Cache-Control ヘッダーのテスト

Web コンテンツの TTL 設定を簡単に確認できます。 ブラウザーの開発者ツールを使って、Web コンテンツに Cache-Control 応答ヘッダーが含まれているかどうかをテストします。 wgetPostmanFiddler などのツールを使って応答ヘッダーを確認することもできます。

次の手順