カスタムエラーレスポンスの生成 - Amazon CloudFront

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

カスタムエラーレスポンスの生成

使用しているオブジェクトが何らかの理由で使用できない場合、ウェブサーバー CloudFront は通常、関連する HTTP ステータスコードを に返 CloudFront してこれを示します。例えば、ビューワーが無効な URL をリクエストした場合、ウェブサーバーは HTTP 404 (Not Found) ステータスコードを に返し CloudFront、そのステータスコードをビューワーに CloudFront 返します。

必要に応じて、代わりにビューワーにカスタムエラーレスポンスを返す CloudFront ように を設定できます。また、エラーが発生したときの の CloudFront 応答を管理するためのオプションがいくつかあります。カスタムエラーメッセージのオプションを指定するには、ディス CloudFront トリビューションを更新してそれらの値を指定します。詳細については、「エラーレスポンス動作を設定する」を参照してください。

HTTP ステータスコードのカスタムエラーページを返 CloudFront すように を設定しても、カスタムエラーページが使用できない場合、 はカスタムエラーページを含むオリジンから CloudFront 受信したステータスコードをビューワーに CloudFront 返します。例えば、カスタムオリジンが 500 ステータスコードを返し、Amazon S3 バケットから 500 ステータスコードのカスタムエラーページを取得する CloudFront ように を設定したとします。ただし、誰かが誤ってバケットからカスタムエラーページを削除しました。 は、オブジェクトをリクエストしたビューワーに HTTP 404 ステータスコード (Not Found) CloudFront を返します。

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

エラーレスポンス動作を設定する

カスタムエラーレスポンスを設定するには、 CloudFront コンソール、 CloudFront API、または を使用しますAWS CloudFormation。これらの内どれにより設定を更新する場合でも、次に挙げるヒントと推奨事項を参考にしてください。

  • カスタムエラーページは、 がアクセスできる場所に保存します CloudFront。これらのページの保存先は、Amazon S3 バケットにすることを推奨します。また、ウェブサイトやアプリケーションなど、他のコンテンツと同じ場所には保存しないようにしてください。ウェブサイトまたはアプリケーションと同じオリジンにカスタムエラーページを保存し、オリジンが 5xx エラーを返し始めた場合、オリジンサーバーが使用できないため、カスタムエラーページを取得 CloudFront できません。詳細については、「オブジェクトとカスタムエラーページを別の場所に格納する」を参照してください。

  • にカスタムエラーページを取得するアクセス許可 CloudFront があることを確認します。カスタムエラーページが Amazon S3 に保存されている場合、そのページはパブリックにアクセス可能であるか、 CloudFront オリジンアクセスコントロール (OAC) を設定する必要があります。カスタムエラーページをカスタムオリジンに格納する場合には、そのページはパブリックにアクセス可能である必要があります。

  • (オプション) 必要に応じてオリジンを設定し、カスタムエラーページに Cache-Control または Expires ヘッダーを追加します。エラーキャッシュ最小 TTL 設定を使用して、 がカスタムエラーページを CloudFront キャッシュする期間を制御することもできます。詳細については、「がエラーを CloudFront キャッシュする時間の制御」を参照してください。

カスタムエラーレスポンスを設定する (CloudFront コンソール)

CloudFront コンソールでカスタムエラーレスポンスを設定するには、 ディストリビューションが必要です CloudFront。コンソールからカスタムエラーレスポンスの構成を設定する際には、ディストリビューションが既に用意されている必要があります。ディストリビューションの作成方法については、「シンプルな CloudFront ディストリビューションの開始方法」を参照してください。

カスタムエラーレスポンスを設定するには (コンソール)
  1. にサインインAWS Management Consoleし、 の CloudFront コンソールでディストリビューションページを開きますhttps://console.aws.amazon.com/cloudfront/v4/home#distributions

  2. ディストリビューションの一覧で、更新するディストリビューションを選択します。

  3. [エラーページ] タブを開き、[カスタムエラーレスポンスの作成] をクリックします。

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

  5. 必要な値を入力したら、[作成] をクリックします。

カスタムエラーレスポンスを設定する (CloudFront API または AWS CloudFormation)

CloudFront API または を使用してカスタムエラーレスポンスを設定するにはAWS CloudFormation、ディストリビューションで CustomErrorResponseタイプを使用します。詳細については、次を参照してください。

特定の HTTP ステータスコードに対応するカスタムエラーページの作成

デフォルトメッセージの代わりにカスタムエラーメッセージを表示する場合、例えば、ウェブサイトの他のページと同じ形式を使用するページなど、カスタムエラーメッセージを含むオブジェクト (HTML ファイルなど) をビューワー CloudFront に戻すことができます。

返すファイルと返すエラーを指定するには、ディス CloudFront トリビューションを更新してそれらの値を指定します。詳細については、「エラーレスポンス動作を設定する」を参照してください。

例として、カスタムエラーページは次のようなものになります。


				AWS 404 page

サポートされている HTTP ステータスコードごとに異なるオブジェクトを指定することができます。または、サポートされているすべてのステータスコードに同じオブジェクトを使用することもできます。一部のステータスコードにカスタムエラーページを指定し、他のステータスコードには指定しないようにもできます。

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

  • クライアントエラーは、リクエストに問題があることを示します。たとえば、指定した名前のオブジェクトが使用不能である場合や、Amazon S3 バケット内のオブジェクトを取得するために必要な権限がユーザーにない場合などです。クライアントエラーが発生すると、オリジンは 4xx 範囲の HTTP ステータスコードを に返しますCloudFront。

  • サーバーエラーの場合は、オリジンサーバーに問題があります。たとえば、HTTP サーバーが混雑していたり使用不能であったりする場合です。サーバーエラーが発生すると、オリジンサーバーは 5xx 範囲の HTTP ステータスコードを に返すか CloudFront、一定期間オリジンサーバーからレスポンスが届 CloudFront かず、504 ステータスコード (Gateway Timeout) を引き受けます。

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

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

    注記

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

  • 500、501、502、503、504

    注記

    場合によっては、HTTP 503 ステータスコードのカスタムエラーページを返 CloudFront さない CloudFront ように を設定しても、 が返さないことがあります。 CloudFront エラーコードが Capacity Exceededまたは の場合Limit Exceeded、 はカスタムエラーページを使用せずに 503 ステータスコードをビューワーに CloudFront 返します。

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

オブジェクトとカスタムエラーページを別の場所に格納する

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

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

  • [Origin (オリジン)] の値は、カスタムエラーページが含まれているオリジンの [Origin ID (オリジン ID)] の値を指定しています。

詳細については、「キャッシュ動作の設定」を参照してください。

によって返されるレスポンスコードの変更 CloudFront

オリジンから受信した HTTP ステータスコードとは異なる HTTP ステータスコードをビューワーに返す CloudFront CloudFrontように を設定できます。例えば、オリジンが 500 ステータスコードを に返す場合 CloudFront、カスタムエラーページと 200 ステータスコード (OK) をビューワーに CloudFront 返すことができます。オリジンが に返したステータスコードとは異なるステータスコードをビューワーに CloudFront 返す理由はさまざまです CloudFront。

  • インターネットデバイス (一部のファイアウォールやコーポレートプロキシなど) の中には、HTTP 400 番台と 500 番台のステータスコードを遮断して、このレスポンスがビューワーに返信されないようするものがあります。このシナリオの場合、200 に置換することで、応答は遮断されなくなります。

  • 異なるクライアントエラーやサーバーエラーの区別が重要でない場合は、 がすべての 4xx 400または 5xx ステータスコードに対して返す CloudFront値500として または を指定できます。

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

CloudFront 標準ログを有効にし、レスポンスの HTTP ステータスコードを変更するように を設定 CloudFrontした場合、ログの sc-status列の値には、指定したステータスコードが含まれます。ただし、x-edge-result-type 列の値は影響を受けません。この列には、オリジンから返された結果タイプが記述されます。例えば、オリジンが 404 (Not Found) を 200に返すときに、ビューワー CloudFront に のステータスコードを返すように を設定するとします 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 キャッシュする時間の制御

CloudFront は、デフォルトの期間である 10 秒間、エラーレスポンスをキャッシュします。 CloudFront その後、オブジェクトに対する次のリクエストをオリジンに送信し、エラーの原因となった問題が解決され、リクエストされたオブジェクトが使用可能かどうかを確認します。

キャッシュする 4xx および 5xx ステータスコードごとに、エラーキャッシュ期間であるエラーキャッシュ最小 TTL を指定できます。 CloudFront (詳細については、キャッシュする CloudFront HTTP 4xx および 5xx ステータスコード を参照してください)。期間を指定する場合は、以下の点に注意してください。

  • 短いエラーキャッシュ期間を指定すると、期間を長く指定するよりもオリジンへのリクエストが多く CloudFront なります。この構成で 5xx エラーが発生すると、エラーの返信処理のために、オリジンで障害を起こした問題が悪化する可能性があります。

  • オリジンがオブジェクトのエラーを返すと、 は、エラーキャッシュ期間が経過するまで、エラーレスポンスまたはカスタムエラーページを使用してオブジェクトのリクエスト CloudFront に対応します。エラーキャッシュ期間を長く指定すると、オブジェクトが再び利用可能になってから、 はリクエストにエラーレスポンスまたはカスタムエラーページで長期間応答し続ける CloudFront 可能性があります。

注記

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

が個々のオブジェクトのエラーを CloudFront キャッシュする期間を制御する場合は、そのオブジェクトのエラーレスポンスに適切なヘッダーを追加するようにオリジンサーバーを設定できます。

オリジンが Cache-Control: max-ageまたは Cache-Control: s-maxageディレクティブ、または Expiresヘッダーを追加すると、 はヘッダーまたはエラー CloudFront キャッシュ最小 TTL の値のうち大きい方の値に対するエラーレスポンスをキャッシュします。

注記

Cache-Control: max-age および Cache-Control: s-maxage の値は、エラーページをフェッチするキャッシュ動作に設定されている [Maximum TTL] (最大 TTL) の値以下にする必要があります。

オリジンが他のCache-Controlディレクティブを追加するか、ヘッダーを追加しない場合、 はエラーキャッシュ最小 TTL の値のエラーレスポンスをCloudFront キャッシュします。

オブジェクトに対する 4xx または 5xx ステータスコードの有効期限が、設定した待機時間よりも長く、さらにオブジェクトが使用可能状態に復帰した場合は、リクエストされたオブジェクトの URL を使ってそのステータスコードを無効化できます。オリジンが複数のオブジェクトに対してエラーレスポンスを返している場合は、各オブジェクトについて個別に無効化する必要があります。オブジェクトの無効化については、「ファイルの無効化」を参照してください。