Azure Content Delivery Network で Web コンテンツの有効期限を管理する
重要
Azure CDN Standard from Microsoft (クラシック) は、2027 年 9 月 30 日に廃止されます。 サービスの中断を回避するには、2027 年 9 月 30 日までに Azure Front Door の Standard または Premium レベルに Azure CDN Standard from Microsoft (クラシック) プロファイルを移行することが重要です。 詳細については、Azure CDN Standard from Microsoft (クラシック) の廃止に関するページを参照してください。
Azure CDN from Edgio は、2025 年 1 月 15 日に廃止される予定です。 サービスが中断しないようにするには、この日までに Azure Front Door にワークロードを移行する必要があります。 詳細については、「Azure CDN from Edgio の提供終了に関するよくあるご質問」を参照してください。
パブリックにアクセス可能な配信元 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 キャッシュ規則] ページに移動するには:
Azure portal で、コンテンツ配信ネットワーク プロファイルを選び、Web サーバーのエンドポイントを選びます。
左側のウィンドウの [設定] で、 [キャッシュ規則] を選択します。
[キャッシュ規則] ページが表示されます。
グローバル キャッシュ規則を使用して Web サーバーの Cache-Control ヘッダーを設定するには:
[グローバル キャッシュ規則] で、 [クエリ文字列のキャッシュ動作] を [クエリ文字列を無視] に設定し、 [キャッシュ動作] を [オーバーライド] に設定します。
[キャッシュの有効期間] として、 [Seconds] (秒) ボックスに「3600」と入力するか、または [時間] ボックスに「1」と入力します。
このグローバル キャッシュ規則は 1 時間のキャッシュ有効期間を設定し、エンドポイントへのすべての要求に影響を与えます。 これは、エンドポイントで指定された配信元サーバーによって送信されるすべての
Cache-Control
またはExpires
HTTP ヘッダーをオーバーライドします。[保存] を選択します。
カスタム キャッシュ規則を使用して Web サーバー ファイルの Cache-Control ヘッダーを設定するには:
[Custom caching rules] (カスタム キャッシュ規則) で、次の 2 つの一致条件を作成します。
最初の一致条件では、 [一致条件] を [パス] に設定し、 [一致する値] として
/webfolder1/*
を入力します。 [キャッシュ動作] を [オーバーライド] に設定し、 [日] ボックスに「4」と入力します。2 番目の一致条件では、 [一致条件] を [パス] に設定し、 [一致する値] として
/webfolder1/file1.txt
を入力します。 [キャッシュ動作] を [オーバーライド] に設定し、 [日] ボックスに「2」と入力します。
最初のカスタム キャッシュ規則は、エンドポイントで指定された配信元サーバー上の
/webfolder1
フォルダー内のすべてのファイルに対して 4 日間のキャッシュ有効期間を設定します。 2 番目の規則はfile1.txt
ファイルについてのみ最初の規則をオーバーライドし、そのファイルに対して 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-Control
max-age
ディレクティブの値として使用されます。 <clientCache>
要素の詳細については、クライアント キャッシュ <clientCache> に関するページを参照してください。
プログラムによる Cache-Control ヘッダーの設定
ASP.NET アプリケーションでは、.NET API の HttpResponse.Cache プロパティを設定することによって、コンテンツ配信ネットワークのキャッシュ動作をプログラムで制御します。 HttpResponse.Cache プロパティの詳細については、HttpResponse.Cache プロパティに関するページと HttpCachePolicy クラスに関するページをご覧ください。
アプリケーションのコンテンツを ASP.NET でプログラムでキャッシュするには、次の手順に従います。
HttpCacheability
をPublic
に設定することで、コンテンツをキャッシュ可能とマークします。- 次のいずれかの
HttpCachePolicy
メソッドを呼び出して、キャッシュ検証を設定します。SetLastModified
を呼び出して、Last-Modified
ヘッダーのタイムスタンプの値を設定します。SetETag
を呼び出して、ETag
ヘッダーの値を設定します。
- 必要に応じて、
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
応答ヘッダーが含まれているかどうかをテストします。 wget や Fiddler などのツールを使用して応答ヘッダーを確認することもできます。