コンテンツを提供するために Amazon CloudFront ディストリビューションを使用しています。しかし、閲覧者がウェブブラウザからコンテンツにアクセスしようとすると 504 エラーが表示されます。これらのエラーを解決するにはどうすればよいですか?
簡単な説明
CloudFront は 2 種類の 504 エラーを返します。
- 504:「Gateway Time-out」(ゲートウェイタイムアウト) エラーは、エラーがオリジンによって返され、CloudFront を経由して閲覧者に渡されたときに発生します。
- 504:「The request could not be satisfied」(リクエストに失敗しました) エラーは、割り当てられた時間枠内にオリジンが CloudFront に応答しなかったためにリクエストの有効期限が切れた場合に発生します。
表示されたエラーに基づいて、関連する解決方法のセクションを参照してください。
解決方法
504:「Gateway Time-out」(ゲートウェイタイムアウト) エラー
セキュリティグループで正しいポートが開いていることを確認します。
オリジンサーバーが CloudFront からのインバウンドトラフィック (通常はポート 443 または 80) を許可していることを確認します。
オリジンが Elastic Load Balancing を使用している場合は、ELB セキュリティグループを確認します。セキュリティグループが CloudFront からのインバウンドトラフィックを許可していることを確認します。
オリジンサーバーのファイアウォールが CloudFront からの接続を許可していることを確認する
OS に応じて、ファイアウォールがポート 443 と 80 のトラフィックを許可していることを確認します。
Redhat Linux View を使用している場合は、ファイアウォールルールが次の設定と一致していることを確認します。
ファイアウォールルール:
$ sudo firewall-cmd --permanent --zone=public --list-ports
恒久的な追加ルール:
$ sudo firewall-cmd --permanent --zone=public --add-port=80/tcp
$ sudo firewall-cmd --permanent --zone=public --add-port=443/tcp
Ubuntu Linux を使用している場合は、ファイアウォールルールが次の設定と一致していることを確認します。
Ubuntu Linux View ファイアウォールルール:
$ sudo ufw status verbose
恒久的な追加ルール:
$ sudo ufw allow 80
$ sudo ufw allow 443
Windows サーバーで Windows Firewall を使用する場合は、Microsoft ドキュメントの「Add or Edit Firewall Rule」(ファイアウォールルールの追加または編集) を参照してください。
カスタムサーバーがインターネット経由でアクセス可能であることを確認する
CloudFront がインターネット経由でオリジンにアクセスできない場合、CloudFront は 504 エラーを返します。インターネットトラフィックがオリジンに接続できることを確認するには、HTTP ルールと HTTPS ルールが次の設定と一致していることを確認します。
HTTPS トラフィックの場合:
nc -zv OriginDomainName/IP_Address 443
telnet OriginDomainName/IP_Address 443
HTTP トラフィックの場合:
nc -zv OriginDomainName 80
telnet OriginDomainName 80
504:「The request could not be satisfied」(リクエストに失敗しました) エラー
ウェブアプリケーションの一般的な高負荷レイテンシーを測定する
次のコマンドを使用して、ウェブアプリケーションの応答性を測定します。
curl -w "DNS Lookup Time: %{time_namelookup} \nConnect time: %{time_connect} \nTLS Setup: %{time_appconnect} \nRedirect Time: %{time_redirect} \nTime to first byte: %{time_starttransfer} \nTotal time: %{time_total} \n" -o /dev/null https://www.example.com/yourobject
注: https://www.example.com/yourobject には、テストするウェブアプリケーションの URL を入力します。
出力は次のようになります。
DNS Lookup Time: 0.212319
Connect time: 0.371254
TLS Setup: 0.544175
Redirect Time: 0.000000
Time to first byte: 0.703863
Total time: 0.703994
リクエストのロケーションに応じて、レイテンシーが高いステップをトラブルシューティングします。
リソースを追加するか、サーバーとデータベースをチューニングする
サーバーに、閲覧者のリクエストを処理するための十分な CPU、メモリ、およびディスク容量があることを確認してください。
バックエンドサーバーで永続的な接続を設定します。これらの接続は、後続のリクエストのために接続を再確立する必要がある場合のレイテンシーに役立ちます。
CloudFront タイムアウト値を調整する
前のトラブルシューティングのステップで HTTP 504 エラーが解決しない場合は、オリジンレスポンスタイムアウトについてディストリビューションで指定されている時間を更新します。
関連情報
HTTP 504 ステータスコード (Gateway Timeout)