CloudFront からの 502 「リスエストに失敗しました」エラーをトラブルシューティングするにはどうすればよいですか?

所要時間2分
0

Amazon CloudFront ディストリビューションにカスタムドメインを設定しました。CloudFront に対して代替の Canonical Name Record (CNAME) ドメインをリクエストすると、「リスエストに失敗しました」メッセージで 502 エラーレスポンスが返されます。

簡単な説明

502 エラーは、CloudFront がオリジンに接続できない場合に発生します。エラーの原因とトラブルシューティングの方法については、以降のセクションを参照してください。

解決方法

CloudFront がオリジンサーバーと TCP 接続を確立できない

デフォルトでは、CloudFront はポート 80 (HTTP の場合) とポート 443 (HTTPS の場合) を介してオリジンに接続します。オリジンがこれらのポートを介したトラフィックを許可しない場合、または CloudFront IP アドレスの接続をブロックしている場合、TCP 接続は失敗します。この失敗により 502 エラーが発生します。解決するには、CloudFront ディストリビューションの [Protocol] (プロトコル) 設定が HTTP または HTTPS 接続用の正しいポートに設定されていることを確認します。

ポート接続をテストするには、次のコマンドを実行します。

telnet ORIGIN_DOMAIN/ORIGIN_IP PORT

: ORIGIN_DOMAIN には、オリジンドメインの ID を入力します。ORIGIN_IP には、オリジンの IP アドレスを入力します。[PORT] (ポート) に、オリジンへの接続に使用するポート番号を入力します。

オリジンサーバーとの SSL/TLS ネゴシエーションが失敗する

SSL/TLS トランザクションが失敗すると、CloudFront とオリジン間の接続が失敗し、502 エラーが発生します。SSL/TLS トランザクションの失敗の原因とその解決方法については、以降のセクションを参照してください。

SSL 証明書がドメイン名と一致していない

オリジンの SSL 証明書は、次のドメイン名のいずれかを含むか、カバーしている必要があります。

  • 証明書の [Common Name] (共通名) フィールドまたは [Subject Alternative Names] (サブジェクト代替名) フィールドのオリジンドメイン名。
  • CloudFront ディストリビューションのオリジンに転送される受信ビューアーホストヘッダーのホストヘッダーのドメイン名。

証明書の [Common Name] (共通名) または [Subject Alternative Names] (サブジェクト代替名) を確認するには、次のコマンドを実行します。

$ openssl s_client -connect DOMAIN:443 -servername SERVER_DOMAIN | openssl x509 -text | grep -E '(CN|Alternative)' -A 2

注: DOMAIN には、オリジンドメイン名を入力します。SERVER_DOMAIN には、オリジンドメイン名を入力します。または、ビューアホストヘッダーがオリジンに転送される場合、SERVER_DOMAIN に受信ホストヘッダー値を入力します。

以下が当てはまる場合、ホストヘッダーを含めるようにキャッシュポリシーまたはオリジンリクエストポリシーを構成します。

  1. SSL 証明書の共通名またはストレージエリアネットワーク (SAN) に Viewer ホストヘッダー値が含まれています。
  2. ホストヘッダーがオリジンに転送されません。

オリジン証明書が期限切れか、信頼されていないか、自己署名されていない

カスタムオリジンにインストールされた証明書は、信頼できる認証機関によって署名されている必要があります。CloudFront によって信頼されている認証機関は、Mozilla ウェブサイトの「Mozilla Included CA Certificate List」に記載されています。

CloudFront は、オリジンでセットアップされた SSL の自己署名証明書をサポートしていません。自己署名証明書は、信頼できる認証機関によって発行されるのではなく、組織自身によって発行されるか、Web サーバー上でローカルに生成されます。

オリジン証明書の有効期限が切れているかどうかを確認するには、次の OpenSSL コマンドを実行します。出力で、Not Before パラメータと Not After パラメータを見つけます。現在の日時が証明書の有効期間内であることを確認します。

$ openssl s_client -connect DOMAIN:443 -servername SERVER_DOMAIN | openssl x509 -text | grep Validity -A 3

注: DOMAIN には、オリジンドメイン名を入力します。SERVER_DOMAIN には、オリジンドメイン名を入力します。または、ビューアホストヘッダーがオリジンに転送される場合、SERVER_DOMAIN に受信ホストヘッダー値を入力します。

中間 CA 証明書がないか、中間証明書の順序が正しくないと、HTTPS 通信とオリジンの間で障害が発生します。証明書チェーンを確認するには、次のコマンドを実行します。

$ openssl s_client -showcerts -connect DOMAIN:443 -servername SERVER_DOMAIN

注: DOMAINSERVER_DOMAIN にはオリジンドメイン名を入力します。または、ビューアホストヘッダーがオリジンに転送される場合、SERVER_DOMAIN に受信ホストヘッダー値を入力します。

オリジンの暗号スイートが CloudFront でサポートされていない

共通のネゴシエートされた暗号スイートがない場合、CloudFront とオリジン間の SSL/TLS トランザクションは失敗します。正しい暗号スイートを使用していることを確認するには、「CloudFront とオリジンとの間でサポートされているプロトコルと暗号」を参照してください。

SSL サーバーテストツールを使用して、サポートされている暗号のリストにオリジンドメイン名が含まれているかどうかを確認することもできます。

CloudFront がオリジンの IP アドレスを解決できない

CloudFront がオリジンドメインを解決できない場合、502 エラーが返されます。これをトラブルシューティングするには、dig または nslookup コマンドを使用して、オリジンドメインが IP に解決されるかどうかを確認します

Linux の場合:

$ dig ORIGIN_DOMAIN_NAME

Windows の場合:

nslookup ORIGIN_DOMAIN_NAME

: ORIGIN_DOMAIN_NAME には、オリジンドメイン名を入力します。

成功すると、コマンドによってオリジンドメイン名の IP が返されます。DNS チェッカーツールを使用して、さまざまな地域の DNS 解決を確認します。

エラーの原因がアップストリームのオリジンである

CloudFront ディストリビューションで定義されるカスタムオリジンは、プロキシ、コンテンツ配信ネットワーク (CDN) ホスト名、または実際のオリジンに接続されたロードバランサーです。これらの仲介サービスのいずれかがオリジンへの接続に失敗すると、502 エラーが CloudFront に返されます。これを解決するには、サービスプロバイダーと協力してください。

CloudFront ディストリビューションに関連付けられた Lambda@Edge 関数が検証に失敗する

Lambda@Edge 関数によって有効ではないレスポンスが CloudFront に返されると、CloudFront によって 502 エラーが返されます。これを解決するには、Lambda@Edge 関数に以下の一般的な問題がないか確認してください。

  • 返された JSON オブジェクト
  • 必須フィールドの欠落
  • 応答内の無効なオブジェクト
  • 許可されていないヘッダーまたは読み取り専用ヘッダーの追加または更新
  • 本文の最大サイズの超過
  • 無効な文字または値

詳細については、「Lambda@Edge 関数のテストとデバッグ」を参照してください。


AWS公式
AWS公式更新しました 1年前