Skip to main content

 

 

 

 
Language:

 

 
 
 
OutSystems

HTTP 502(無効なゲートウェイ)エラーのトラブルシューティング

この記事では、HTTP 502エラーコードと、その解決方法について説明します。

HTTP 502とは

HTTP 502 - 無効なゲートウェイサーバーエラーのレスポンスコードは、ゲートウェイまたはプロキシとして機能しているサーバーがアップストリームサーバーから無効なレスポンスを受信したことを示します。

一般的な本番シナリオでは、サーバーの前にリバースプロキシまたはロードバランサがあります。 クライアントがサーバーにリクエストを送信した場合を考えます。ところが、クライアントはこれを直接実行できないため、プロキシに接続し、クライアントからプロキシへの接続を確立します。 その後、プロキシはプロキシとサーバー間の接続を作成します。以下のいずれかの場合に、HTTP 502 - 無効なゲートウェイエラーが発生します。 * リクエストが完了する前にプロキシがタイムアウトした。 * プロキシからサーバーへの接続が切断されている。 * サーバーからのレスポンスが無効である。

プロキシによって管理されるクライアントとサーバー間の通信

最も一般的な原因

プロキシのタイムアウト

この問題は、該当のリクエストに対してプロキシのタイムアウトがサーバーよりも短い場合に発生する可能性があります。特定のリクエストに対してサーバーのタイムアウトが5分に設定されているにもかかわらず、プロキシサーバーのタイムアウトが3分に定義されている場合を考えます。リクエストの所要時間がプロキシレベルで定義された3分のタイムアウトよりも長い場合、プロキシはクライアントに502を発行します。

プロキシのタイムアウトを確認する

プロキシのタイムアウト(または他のネットワーク要素のタイムアウト)があったかどうかを確認するには、サーバーのアクセスログを確認します。IISのアクセスログで、メッセージのステータスコードを確認できます。サーバー側のステータスコードが502ではない場合は、ネットワーク要素によって502が発行されたことになります。

問題がタイムアウトであったかどうかを検証するには、同じリクエストの継続時間を確認し、いずれかのネットワーク要素のタイムアウトがその継続時間よりも短いかどうかを検証します。

プロキシからサーバーへの接続が切断された

リクエストの実行中にプロキシからサーバーへの接続が切断されると、502エラーが発生します。このシナリオでは、サーバー側のリクエストのエントリがIISのアクセスログに表示されない場合があります。ネットワークまたはアプリケーションプールのリサイクル/クラッシュに関連するエラーが表示される場合もよくあります。

プロキシとサーバー間に切断された接続があることを確認する

  • IISのアクセスログを調べて、問題のリクエストが処理されたかどうかを確認します。
  • Windowsイベントビューアを調べて、ネットワーク関連のエラーやアプリケーションプールのリサイクル/クラッシュがあったかどうかを検証します。これは、[Windows logs > System]にあります。

キューに追加されたリクエスト

最後の(通常は見つけにくい)原因は、リクエストがキューに追加されているときやリクエストの継続時間が短いときにタイムアウトになったことで、リクエストが処理されない場合に発生します。

一時的に異常なリクエストのバーストが発生すると、サーバーはそのような大きな要求に対応できない場合があります。最終的には、リクエストがキューに追加される可能性があり、プロキシがリクエストを処理せずにタイムアウトするか、またはリクエストの実行継続時間が非常に短く(少なくともタイムアウトよりも短く)なります。

キューに追加されたリクエストを確認する

これを証明する最も簡単な方法は、プロキシとサーバーの両方のアクセスログを確認することです。これらのログでは、プロキシでのリクエストの継続時間がサーバーでのリクエストの継続時間よりもはるかに長いこと(加えて、プロキシがタイムアウトしたこと)がわかります(サーバーにリクエストのエントリがない場合もあります)。

また、監視ツールを使用すると、キューに追加されたリクエストの数を確認できます。リクエストがキューに追加されても、502エラーが発生するとは限らないことに注意してください。このため、IISのアクセスログを調べて、この仮説を確認することを推奨します。