メニュー
Amazon CloudFront
開発者ガイド (API Version 2016-09-29)

CloudFront エッジキャッシュから提供されるリクエストの比率の向上

CloudFront を使用する目的の 1 つに、オリジンサーバーが応答するリクエストの数を減らすことがあります。これにより、ユーザーにより近い CloudFront エッジロケーションからより多くのオブジェクトが提供されるため、オリジンサーバーに対する負荷が軽減され、レイテンシーも短縮されます。すべてのリクエストのうち、CloudFront がエッジキャッシュから提供できるリクエストの数が多ければ多いほど(キャッシュヒット率が大きければ大きいほど)、CloudFront がオブジェクトの最新バージョンまたは一意のバージョンを取得するためにオリジンに転送する必要のあるリクエストの数が少なくなります。

ヒット、ミス、またはエラーであるビューアリクエストの割合は CloudFront コンソールで確認できます。詳細については、Amazon CloudFront 開発者ガイド の「CloudFront キャッシュ統計レポート」を参照してください。

以下のセクションでは、キャッシュヒット率を改善する方法について説明します。

CloudFront がオブジェクトをキャッシュする期間の指定

Cache-Control max-age ディレクティブをオブジェクトに追加し、max-age に対して最も長い実用的な値を指定するようにオリジンを設定することによって、キャッシュヒット率を向上させることができます。キャッシュ期間が短ければ短いほど、CloudFront はより頻繁に、オブジェクトが変更されているかどうかを特定し、変更されている場合は最新バージョンを取得するために別のリクエストをオリジンに転送します。詳細については、「CloudFront エッジキャッシュにオブジェクトを保持する時間の指定(有効期限切れ)」を参照してください。

クエリ文字列パラメーターに基づくキャッシュ

クエリ文字列パラメーターに基づいてキャッシュするように CloudFront を設定する場合、以下を行うことでキャッシュを改善できます。

  • オリジンが一意のオブジェクトを返すクエリ文字列パラメーターのみを転送するように CloudFront を設定する。

  • 同じパラメーターのすべてのインスタンスで大文字と小文字の区別を統一する。たとえば、1 つのリクエストに parameter1=A が含まれており、別のリクエストに parameter1=a が含まれている場合、CloudFront は parameter1=A が含まれているリクエストと parameter1=a が含まれているリクエストを 2 つの個別のリクエストとしてオリジンに転送します。これが行われると、オブジェクトは同一であっても、CloudFront はオリジンから個別に返された対応するオブジェクトを個別にキャッシュします。A または a のどちらかのみを使用すると、CloudFront がオリジンに転送するリクエストが少なくなります。

  • パラメーターの順序を統一する。大文字と小文字が区別されることと同じように、あるオブジェクトに対するリクエストに parameter1=a&parameter2=b というクエリ文字列が含まれており、同じオブジェクトに対する別のリクエストに parameter2=b&parameter1=a が含まれている場合、オブジェクトは同一であっても、CloudFront は両方のリクエストをオリジンに転送し、対応するオブジェクトを個別にキャッシュします。パラメーターの順序を統一すると、CloudFront がオリジンに転送するリクエストが少なくなります。

詳細については、「クエリ文字列パラメーターに基づいてキャッシュするように CloudFront を設定する」を参照してください。CloudFront がオリジンに転送するクエリ文字列を確認するには、CloudFront のアクセスログを有効にし、ログファイルの cs-uri-query 列の値を確認します。詳細については、「アクセスログ」を参照してください。

Cookie 値に基づくキャッシュ

Cookie 値に基づいてキャッシュするように CloudFront を設定する場合、以下を行うことでキャッシュを改善できます。

  • すべての Cookie を転送する代わりに特定の Cookie のみを転送するように CloudFront を設定する。CloudFront が特定の Cookie をオリジンに転送するように設定すると、オブジェクトはすべて同一であっても、CloudFront は Cookie の名前と値のすべての組み合わせを転送し、オリジンが返すオブジェクトを個別にキャッシュします。

    たとえば、ビューアがすべてのリクエストに 2 つの Cookie を含め、それぞれの Cookie に使用できる値が 3 つあり、Cookie 値のすべての組み合わせが可能であるとします。CloudFront は、各オブジェクトに対して最大 6 つの異なるリクエストをオリジンに転送します。オリジンが 1 つの Cookie のみに基づいて同じオブジェクトの複数のバージョンを返す場合、CloudFront は必要以上のリクエストをオリジンに転送し、同一オブジェクトの複数のバージョンを不必要にキャッシュします。

  • 静的コンテンツと動的コンテンツに対してそれぞれ異なるキャッシュ動作を作成し、動的コンテンツの場合にのみ Cookie をオリジンに転送するように CloudFront を設定する。

    たとえば、ディストリビューションのキャッシュ動作が 1 つしかなく、このディストリビューションを .php ファイルなどの動的コンテンツと頻繁に変更されない .css ファイルの両方に使用するとします。CloudFront は Cookie 値に基づいて個別のバージョンの .css ファイルをキャッシュするため、それぞれの CloudFront エッジロケーションがすべての新しい Cookie 値または Cookie 値の組み合わせに対してリクエストをオリジンに転送します。

    Cookie 値に基づいて CloudFront がキャッシュしない、*.css というパスパターンのキャッシュ動作を作成すると、CloudFront はエッジロケーションが特定の .css ファイルに対して受け取る最初のリクエストおよび .css ファイルの有効期限が切れた後の最初のリクエストのみをオリジンに転送します。

  • Cookie 値がユーザーごとに一意である(ユーザー ID など)動的コンテンツと、より少ない数の一意の値に基づいて変化する動的コンテンツに対してそれぞれ異なるキャッシュ動作を作成する(可能な場合)。

詳細については、「Cookie に基づいてオブジェクトをキャッシュするように CloudFront を設定する」を参照してください。CloudFront がオリジンに転送する Cookie を確認するには、CloudFront のアクセスログを有効にし、ログファイルの cs(Cookie) 列の値を確認します。詳細については、「アクセスログ」を参照してください。

リクエストヘッダーに基づくキャッシュ

リクエストヘッダーに基づいてキャッシュするように CloudFront を設定する場合、以下を行うことでキャッシュを改善できます。

  • すべてのヘッダーに基づいて転送およびキャッシュする代わりに特定のヘッダーのみに基づいて転送およびキャッシュするように CloudFront を設定する。特定のヘッダーを指定すると、オブジェクトはすべて同一であっても、CloudFront はヘッダーの名前と値のすべての組み合わせを転送し、オリジンが返すオブジェクトを個別にキャッシュします。

    Note

    CloudFront は常に以下のトピックで指定されているヘッダーをオリジンに転送します。

    リクエストヘッダーに基づいてキャッシュするように CloudFront を設定する場合、CloudFront が転送するヘッダーを変更するのではなく、CloudFront がヘッダー値に基づいてオブジェクトをキャッシュするかどうかのみを変更します。

  • 多数の一意の値を持つリクエストヘッダーに基づいてキャッシュすることを可能な限り回避する。

    たとえば、ユーザーのデバイスに基づいてさまざまなサイズのイメージを提供する場合、使用できる値が多数ある User-Agent ヘッダーに基づいてキャッシュするように CloudFront を設定しないでください。代わりに、CloudFront デバイスタイプヘッダー CloudFront-Is-Desktop-ViewerCloudFront-Is-Mobile-ViewerCloudFront-Is-SmartTV-Viewer、および CloudFront-Is-Tablet-Viewer に基づいてキャッシュするように CloudFront を設定してください。さらに、タブレットとデスクトップに同じバージョンのイメージを返す場合は、CloudFront-Is-Desktop-Viewer ヘッダーではなく CloudFront-Is-Tablet-Viewer ヘッダーのみを転送します。

詳細については、「リクエストヘッダーに基づいてオブジェクトをキャッシュするように CloudFront を設定する」を参照してください。

HTTP を使用したメディアコンテンツの提供

HTTP を使用してメディアコンテンツを配信する場合は、Apple HTTP Dynamic Streaming(Apple HDS)、Apple HTTP Live Streaming(Apple HLS)、Microsoft Smooth Streaming、MPEG-DASH などの HTTP ベースの動的ストリーミングプロトコルを使用することを推奨します。動的ストリーミングプロトコルを使用すると、ビデオは多数の小さい(通常は数秒の)セグメントに分割されます。ユーザーがよくビデオ終了前に視聴を停止する場合(クレジットの表示中にビューアを閉じるなど)、CloudFront はビデオのその時点までの小さいセグメントをすべてキャッシュします。ビデオが単一の大容量ファイルで配信されるプロトコルを使用し、ユーザーがビデオ終了前に視聴を停止する場合、CloudFront がビデオ全体をキャッシュしない可能性があり、キャッシュしなければ CloudFront は次回そのビデオのリクエストを受け取ったときに再度オリジンにビデオをリクエストする必要があります。