カスタムオリジン (EC2 インスタンスまたはロードバランサー) からアプリケーションを使用できますが、CloudFront では失敗します。その理由は何ですか?

最終更新日: 2019 年 6 月 24 日

ウェブサイトまたはアプリケーションのカスタムオリジンとして、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスまたはロードバランサーを使用しています。カスタムオリジンに直接接続できますが、Amazon CloudFront から同じコンテンツを取得できず、CloudFront がエラーを返します。この問題を解決するには、どうすればよいですか? 

解決方法

次のトラブルシューティングの手順を試してみてください。

エラーレスポンスを識別する

ブラウザ開発者ツールの [ネットワーク] タブを確認して、CloudFront から返された HTTP レスポンスヘッダーを判断します。あるいは、cURL のようなユーティリティを使用することもできます。

HTTP 502 ステータスコード (Bad Gateway) レスポンスを受け取っている場合、問題の原因は CloudFront とオリジンの間の SSL 接続にある可能性があります。トラブルシューティングの手順については、「HTTP 502 ステータスコード (Bad Gateway)」を参照してください。

HTTP 504 ステータスコード (Gateway Timeout) レスポンスを受け取っている場合、問題の原因はセキュリティグループまたはファイアウォールのアクセス設定にある可能性があります。トラブルシューティングの手順については、HTTP 504 ステータスコード (Gateway Timeout)」を参照してください。

リクエストヘッダー、クッキー、またはクエリ文字列に基づいて転送を確認する

アプリケーションが特定のリクエストヘッダー、クッキー、またはクエリ文字列を必要としている場合は、ディストリビューションのキャッシュ動作を更新して必要なパラメータをオリジンに転送します。CloudFront はデフォルト設定で必須パラメータを転送しない可能性があります。

詳細については、「クッキーに基づいたコンテンツのキャッシュ」、「クエリ文字列パラメータに基づいたコンテンツのキャッシュ」、および「 リクエストヘッダーに基づいたコンテンツのキャッシュ」を参照してください。

許可されている HTTP メソッドを確認する

デフォルトでは、CloudFront は GET および HEAD HTTP メソッドのみを許可しています。オリジンサーバーでアプリケーションを実行していて CloudFront を介してアプリケーションにアクセスしている場合は、アプリケーションの呼び出しに必要な HTTP メソッドを確認します。これらの HTTP メソッドはディストリビューションでも許可されている必要があります。たとえば、フォームを送信するためにアプリケーションを実行している場合は、ディストリビューションで POST メソッドを許可する必要があります。ディストリビューションで許可されている HTTP メソッドを変更する方法については、「許可されている HTTP メソッド」を参照してください。

クライアントと CloudFront の間の SSL の問題を解決する

SSL の問題で CloudFront を介してウェブサイトまたはアプリケーションにアクセスできない場合は、「CloudFront が HTTPS 経由でドメイン名を提供しないのはなぜですか?」を参照してください。

恒常的なリダイレクトの問題を解決する

CloudFront を介してウェブサイトまたはアプリケーションをロードしようとしたときに恒常的にリダイレクトされる場合は、CloudFront のオリジン設定を確認します。さらに、オリジンサーバーのリダイレクトポリシーを確認します。

一般的なワークフローでは、クライアントは CloudFront に接続し、次に CloudFront はオリジンサーバーに接続します。ワークフローを成功させるには、ディストリビューションのオリジンプロトコルポリシーとオリジンサーバーのリダイレクトポリシーが互いに互換性がある必要があります。

たとえば、オリジンサーバーがすべての HTTP リクエストを HTTPS にリダイレクトし、ディストリビューションのオリジンプロトコルポリシーが HTTP に設定されている場合、リクエストはループで送信されます。このシナリオでは、クライアントが http://d12345.cloudfront.net/example.image をリクエストすると、CloudFront は HTTP 経由でコンテンツを取得するリクエストをオリジンサーバーに行います。リクエストはオリジンサーバーに到達し、オリジンサーバーはリクエストを HTTP から HTTPS にリダイレクトします。リクエストは HTTPS を使用して CloudFront にルーティングされ、その後 CloudFront が HTTP を使用してオリジンにリクエストを再度送信し、リクエストループを再開します。

恒常的なリダイレクトを解決するには、次のいずれかの設定を使用します。

  • HTTPS のみを使用するように CloudFront ディストリビューションのオリジンプロトコルポリシーを変更します。これには、カスタムオリジンサーバーに有効な SSL 証明書がインストールされている必要があります。
  • オリジンサーバーに有効な SSL 証明書がインストールされていない場合は、リダイレクトポリシーを削除できます。その後、HTTP リクエストを受け付けるようにオリジンサーバーを設定できます。
    警告: 通信はプレーンテキストで行われるため、HTTP リクエストは機密情報にはお勧めできません。

この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合