メニュー
Amazon CloudFront
開発者ガイド (API バージョン 2016-09-29)

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

コンテンツのオリジンサーバーにアクセスするのではなく、CloudFront エッジキャッシュから提供されるビューワーからのリクエストの比率を増やしてパフォーマンスを向上させる、つまりキャッシュヒット率を向上させることができます。

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

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

Cache-Control max-age ディレクティブをオブジェクトに追加し、max-age に対して最も長い実用的な値を指定するようにオリジンを設定することによって、キャッシュヒット率を向上させることができます。キャッシュ期間が短ければ短いほど、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 のアクセスログを有効にし、ログファイルの 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 つしかなく、このディストリビューションを .js ファイルなどの動的コンテンツと頻繁に変更されない .css ファイルの両方に使用するとします。CloudFront は Cookie 値に基づいて個別のバージョンの .css ファイルをキャッシュするため、それぞれの CloudFront エッジロケーションがすべての新しい Cookie 値または Cookie 値の組み合わせに対してリクエストをオリジンに転送します。

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

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

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

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

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

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

    注記

    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 ヘッダーのみを転送します。

詳細については、「リクエストヘッダーに基づくコンテンツのキャッシュ」を参照してください。

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

オンデマンドでの最適化およびストリーミングビデオコンテンツの詳細については、CloudFront を使用したオンデマンドおよびライブストリーミングビデオ を参照してください。