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

エラーレスポンスのカスタマイズ

CloudFront から供給されているオブジェクトが何らかの理由で使用できなくなったとき、通常、ウェブサーバーは CloudFront に HTTP ステータスコードを返します。たとえば、ビューアが無効な URL を指定している場合、ウェブサーバーは 404 ステータスコードを CloudFront に返し、CloudFront はそのステータスコードをビューアに返します。ビューアには、次のような簡潔で特に書式設定されていないデフォルトメッセージが表示されます。

Not Found: The requested URL /myfilename.html was not found on this server.

デフォルトメッセージはなく、お客様のウェブサイトの他のページと同じ書式設定のカスタムエラーメッセージを表示することを希望する場合は、カスタムエラーメッセージを含むオブジェクト(例: HTML ファイル)が CloudFront からビューアに返されるようにすることができます。

 AWS の 404 ページ。

サポートされている HTTP ステータスコードごとに異なるオブジェクトを指定することができます。または、サポートされているすべてのステータスコードに同じオブジェクトを使用することもできます。一部のステータスコードにオブジェクトを指定して、それ以外には指定しないことも可能です。

CloudFront を通して供給されているオブジェクトは、様々な理由で使用できなくなることがあります。理由は、大きく 2 つに分類できます。以下にそれぞれを説明します。

  • クライアントエラーは、リクエストに問題があります。たとえば、指定した名前のオブジェクトを取得できない、または Amazon S3 バケット内のオブジェクトを取得するために必要な許可をユーザーが持っていないという場合です。クライアントエラーが発生すると、オリジンは 400 番台の HTTP ステータスコードを CloudFront に返します。

  • サーバーエラーは、オリジンサーバーに問題があります。たとえば、HTTP サーバーが混雑していたり使用不能であったりする場合です。サーバーエラーが発生すると、オリジンサーバーから 500 番台の HTTP ステータスコードが CloudFront に返されるか、または一定の時間オリジンサーバーから CloudFront へのレスポンスがなくなり(ゲートウェイタイムアウトと見なされて)504 ステータスコードが返されます。

CloudFront がカスタムエラーページを返すことのできる HTTP ステータスコードは、以下のとおりです。

  • 400、403、404、405、414、416

  • 500、501、502、503、504

注記

リクエストされた範囲は不適格であることを示す HTTP ステータスコード 416(Requested Range Not Satisfiable)のカスタムエラーページを作成したり、オリジンが CloudFront にステータスコード 416 を返すと CloudFront がビューアに返す HTTP ステータスコードを変更したりできます。(詳細については、「レスポンスコードを変更する」を参照してください)。ただし、CloudFront はステータスコード 416 のレスポンスをキャッシュしないので、ステータスコード 416 の [Error Caching Minimum TTL] の値を指定することはできますが、CloudFront はそれを使用しません。

CloudFront がオリジンからのエラーレスポンスを処理する方法の詳細な説明は、「CloudFront がオリジンからの HTTP 4xx および 5xx ステータスコードを処理してキャッシュに保持する方法」を参照してください。

カスタムエラーページのキャッシュ動作を作成または更新する

オブジェクトとカスタムエラーページを別の場所に保存する場合は、次の状況に該当するときに適用されるキャッシュ動作をディストリビューションに組み込む必要があります。

  • Path Pattern の値が、カスタムエラーメッセージのパスと一致する。たとえば、4xx エラーのカスタムエラーページを /4xx-errors というディレクトリーの Amazon S3 バケットに保存したとします。このとき、パスパターンによってカスタムエラーページのリクエストがルーティングされる場所のキャッシュ動作を、ディストリビューションに組み込む必要があります(例: /4xx-errors/*)。

  • Origin の値が、カスタムエラーページを含むオリジンの Origin ID の値を指定している。

詳細については、トピック「ウェブディストリビューションを作成または更新する場合に指定する値」の「キャッシュ動作の設定」を参照してください。

レスポンスコードを変更する

CloudFront から返される HTTP ステータスコードを選択するとともに、特定の HTTP ステータスコードにカスタムエラーページを指定することができます。たとえば、オリジンから 500 ステータスコードが CloudFront に返されるときに、CloudFront からカスタムエラーページと 200 ステータスコード(OK)がビューアに返されるようにしたいことがあります。さまざまな理由で、オリジンから CloudFront に返されるステータスコードとは異なるステータスコードが CloudFront からビューアに返されることが必要になる場合があります。

  • インターネットデバイス(一部のファイアウォールやコーポレートプロキシーなど)の中には、HTTP 4xx と 5xx を遮断して、レスポンスをビューアに返さないものがあります。200 に置き換えるなら、レスポンスが遮断されることはほぼなくなります。

  • 各種のクライアントエラーとサーバーエラーを区別しなくてよいのであれば、4xx および 5xx のすべてのステータスコードに対して 400 または 500 を CloudFront が返す値として指定することができます。

  • 200 ステータスコード(OK)と静的ウェブサイトが返されるようにして、お客様のウェブサイトが停止していることをカスタマーに気づかれないようにすることもできます。

CloudFront アクセスログを有効にし、レスポンスの HTTP ステータスコードを変更するように CloudFront を設定した場合、アクセスログの sc-status 列の値は、指定したステータスコードになります。ただし、x-edge-result-type 列の値は影響を受けません。この列の値は引き続きオリジンからのレスポンスの結果の型になります。たとえば、オリジンが 404(Not Found)を CloudFront に返すときに 200 ステータスコードを返すように CloudFront を設定したとします。オリジンが 404 ステータスコードでリクエストに応答すると、アクセスログの sc-status 列の値は 200 になりますが、x-edge-result-type 列の値は Error になります。

カスタムエラーページと共に以下の HTTP ステータスコードのいずれかを返すように、CloudFront を設定できます。

  • 200

  • 400、403、404、405、414、416

  • 500、501、502、503、504

CloudFront がエラーをキャッシュする時間を制御する

デフォルトでは、オリジンから HTTP 4xx または 5xx ステータスコードが返されると、CloudFront はこれらのエラーレスポンスを 5 分間キャッシュし、その後オブジェクトに対する次のリクエストをオリジンに送信して、エラーの原因となった問題が解決され、リクエストしたオブジェクトが利用可能になったかどうか確認します。

注記

リクエストされた範囲は不適格であることを示す HTTP ステータスコード 416(Requested Range Not Satisfiable)のカスタムエラーページを作成したり、オリジンが CloudFront にステータスコード 416 を返すと CloudFront がビューアに返す HTTP ステータスコードを変更したりできます。(詳細については、「レスポンスコードを変更する」を参照してください)。ただし、CloudFront はステータスコード 416 のレスポンスをキャッシュしないので、ステータスコード 416 の [Error Caching Minimum TTL] の値を指定することはできますが、CloudFront はそれを使用しません。

CloudFront がキャッシュする 4xx および 5xx ステータスコードそれぞれに対して、エラーキャッシュ期間(エラーキャッシュ最小 TTL)を指定することができます。手順については、「エラーレスポンス動作を構成する」を参照してください。期間を指定する場合は、以下の点に注意してください。

  • 短いエラーキャッシュ期間を指定すると、長い期間を指定した場合に比べて CloudFront からオリジンに転送されるリクエストの数が多くなります。5xx エラーの場合、期間を短く設定することによって、オリジンからエラーが返されることになった問題が悪化する可能性があります。

  • オリジンがオブジェクトに関するエラーを返すと、CloudFront は、エラーキャッシュ期間が終了するまで、オブジェクトのリクエストにエラーレスポンスで応答するか、またはカスタムエラーページで応答します。長いエラーキャッシュ期間を指定するなら、オブジェクトが再び利用可能になった後も、CloudFront は長い間、リクエストにエラーレスポンスまたはカスタムエラーページで引き続き応答するかもしれません。

CloudFront がエラーをキャッシュする時間を個別のオブジェクトに対して制御することを希望する場合は、以下のようにして、対象のオブジェクトのエラーレスポンスに適切なヘッダーを追加するようにオリジンサーバーを構成できます。

  • オリジンが Cache-Control max-age または Cache-Control s-maxage ディレクティブ、あるいは Expires ヘッダーを追加する場合: CloudFront は、ヘッダーの値と [Error Caching Minimum TTL] の値を比較してより大きい値の期間、エラーレスポンスをキャッシュします。

  • オリジンが他の Cache-Control ディレクティブを追加し、ヘッダーは追加しない場合: CloudFront は、[Error Caching Minimum TTL] の値の期間、エラーレスポンスをキャッシュします。

オブジェクトに対する 4xx または 5xx ステータスコードの有効期限切れ時間が必要な待機時間よりも長い場合は、リクエストされたオブジェクトの URL を使ってそのステータスコードを無効化できます。オリジンが複数のオブジェクトに対してエラーレスポンスを返している場合は、各オブジェクトについて個別に無効化する必要があります。オブジェクトの無効化については、「オブジェクトの無効化(ウェブディストリビューションのみ)」を参照してください。

カスタムエラーページが利用不可である場合の CloudFront の応答

HTTP ステータスコードに対してカスタムエラーページを返すように CloudFront を構成したのに、カスタムエラーページが利用不可である場合、CloudFront は CloudFront がカスタムエラーページを持つオリジンから受信したステータスコードをビューアに返します。たとえば、カスタムオリジンから 500 ステータスコードが返され、500 ステータスコードのためのカスタムエラーページを Amazon S3 バケットから取得するように CloudFront を構成してあるとします。ところが、だれかがうっかりカスタムエラーページをバケットから削除してしまいました。そのオブジェクトをリクエストしたビューアに対して、CloudFront は HTTP 404 ステータスコード(Not found)を返します。

カスタムエラーページの料金

CloudFront がカスタムエラーページをビューアに返したときに、リクエストしたオブジェクトの料金ではなく、カスタムエラーページの標準 CloudFront 料金を支払います。CloudFront の料金の詳細については、「Amazon CloudFront 料金表」を参照してください。

エラーレスポンス動作を構成する

CloudFront API またはコンソールを使用して、CloudFront エラーレスポンスを設定できます。CloudFront API を使用してエラーレスポンスを構成する方法については、「Amazon CloudFront API リファレンス」の「PUT Distribution Config」に記載されている CustomErrorResponses エレメントの箇所を参照してください。

コンソールを使用して CloudFront エラーレスポンスを構成するには

  1. オリジンから HTTP 4xx または 5xx エラーが返されたときに CloudFront がビューアに返すカスタムエラーページを作成します。ページは CloudFront からアクセス可能な場所に保存します。

    カスタムオリジンを使用していない場合であっても、カスタムエラーページは Amazon S3 バケットに保存することをお勧めします。カスタムエラーページを HTTP サーバーに保存した場合、このサーバーが 5xx エラーを返し始めるなら、オリジンサーバーが利用不可であるために、CloudFront はビューアに返すべきファイルを取得できません。

  2. 少なくとも、カスタムエラーページに対する read 許可が CloudFront に付与されていることを確認してください。

    Amazon S3 許可の詳細については、「Amazon Simple Storage Service 開発者ガイド」の「アクセスコントロール」を参照してください。Amazon S3 コンソールを使用して許可を更新する方法については、「Amazon Simple Storage Service Console User Guide」を参照してください。

  3. (オプション)可能であれば、Cache-Control ディレクティブまたは Expires ヘッダーを、特定のオブジェクトに対するエラーレスポンスとともに追加するようにオリジンサーバーを構成します。詳細については、「CloudFront がエラーをキャッシュする時間を制御する」を参照してください。

  4. AWS マネジメントコンソール にサインインし、https://console.aws.amazon.com/cloudfront/ にある、CloudFront コンソールを開きます。

  5. ディストリビューションのリストで、更新するディストリビューションを選択して、[Distribution Settings] を選択します。

  6. [Error Pages] タブを選択します。その後、[Create Custom Error Response] を選択するか、または既存のエラーコードを選択するかして、[Edit] を選択します。

     ディストリビューションの種類として、[Web] を選択します。

  7. 適切な値を入力します。詳細については、「Custom Error Pages(カスタムエラーページ)と Error Caching(エラーキャッシュ)」を参照してください。

  8. カスタムエラーページを返すように CloudFront を構成した場合は、該当するキャッシュ動作を追加または更新します。詳細については、「カスタムエラーページのキャッシュ動作を作成または更新する」を参照してください。

  9. 変更を保存するには、[Yes, Edit] を選択します。