502 Bad Gateway(不正なゲートウェイ)

<ph type="x-smartling-placeholder"></ph> 現在、Apigee Edge のドキュメントが表示されています。
Apigee X のドキュメント
詳細

症状

クライアント アプリケーションが HTTP ステータス コード 502 とメッセージを受け取ります。 API 呼び出しに対するレスポンスとして「Bad Gateway」。

HTTP ステータス コード 502 は、クライアントが バックエンドサーバーと通信します

エラー メッセージ

クライアント アプリケーションが次のレスポンス コードを受け取ります。

HTTP/1.1 502 Bad Gateway

また、次のエラー メッセージが表示される場合があります。

<html>
<head>
<title>Error</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>An error occurred.</h1>
<p>Sorry, the page you are looking for is currently unavailable.<br/>
Please try again later.</p>
</body>
</html>

エラーがバックエンド サーバーから発生している場合は、次のように表示されます。バックエンドからのエラー メッセージは実装によって異なります。

<html>
<head><title>502 Bad Gateway</title></head>
<body bgcolor="white">
<center><h1>502 Bad Gateway</h1></center>
</body>
</html>

考えられる原因

Apigee Edge を通過する API で 502 Bad Gateway エラーが発生する原因には、以下のようなものがあります。

原因 説明 トラブルシューティングの手順:
プールで使用できる MP がいません このエラーは、プール内のすべての MP が使用不能な場合、つまりダウンしているかビジー状態で応答していない場合に発生します。 Edge Private Cloud ユーザー
ルーターと MP 間の SSL 構成が正しくない このエラーは、クライアントの CA 署名付きルート証明書が Edge の Router のトラストストアにない場合に発生します。 Edge Private Cloud ユーザー
バックエンド サーバーからのエラー このエラーは、バックエンド サーバーで障害が発生して、このレスポンスを送信すると発生します。 Edge Public Cloud ユーザーと Edge Private Cloud ユーザー

原因: プールに使用可能な MP がない

このエラーは、特定のリージョン/データセンター内のすべての Message Processor が使用できないことが判明した場合(すべてがダウンしている場合など)に発生します。

Apigee Edge は、特定のリージョン/データセンターの受信 API トラフィック(リクエスト)が、常に Router から同じリージョン/データセンター内の Message Processor(MP)にルーティングされるように構成されています。場合によっては、Apigee Edge コンポーネントが 1 つのリージョン/データセンターにのみ設定されることがあります。場合によっては、複数のリージョン/データセンターに設置されていることもあります。各リージョン/データセンターには、2 つ以上の Router と Message Processor が構成されます。

診断

  1. 複数のリージョン/データセンターがある場合、API リクエストが 502 Bad Gateway エラーで失敗しているリージョン/データセンターを特定します。502 エラーが発生しているリージョンを特定するか、異なるリージョンに属する各 Router の /opt/apigee/var/log/edge-router/nginx/ ディレクトリにある NGINX Access ログを調べることで確認できます。
  2. NGINX エラーログ(/opt/apigee/var/log/edge-router/nginx/ORG-Env._error_log)に次のエラーが記録されています
    2019/06/24 15:26:00 [error] 4796#4796: *56357443 no live upstreams while connecting to upstream, client: <Router_IP_address>, server: <HostAlias>, request: "PUT <BasePath> HTTP/1.1", upstream: "http://<ListOfMP-IP_R-MP-Port>/<BasePath>", host: "<HostAlias>"
    

シナリオ 1: すべての Message Processor がダウンしている

  1. 特定のリージョン/データセンターの Message Processor が稼働しているかどうかを確認します。
  2. すべての Message Processor が停止している場合は、それらを再起動します。

解決策

次のコマンドを使用して、すべての Message Processor を再起動します。

/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

シナリオ 2: すべての Message Processor が進行中のリクエストの処理でビジー状態になる

このエラーは、特定のリージョン/データセンター内のすべての Message Processor が、進行中のリクエストの処理にビジー状態ですべて使用不可であることが判明した場合に発生します。

  1. 特定のリージョン/データセンターの Message Processor が稼働しているかどうかを確認します。
  2. すべての Message Processor が稼働している場合は、Message Processor の CPU 使用率が高くなっているかどうかを調べ、次のコマンドを使用して 30 秒ごとに 3 つのスレッドダンプを生成します。
    <JAVA_HOME>/bin/jstack -l <pid> > <filename>
    
  3. Message Processor のメモリ使用率が高い場合は、次のコマンドを使用してヒープダンプを生成します。
    sudo -u apigee /bin/jmap -dump:live,format=b,file= 
    
  4. 次のコマンドを使用して Message Processor を再起動します。これにより、CPU とメモリが低下します。
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    
  5. API 呼び出しをモニタリングして、問題がまだ存在するかどうかを確認します。
  6. CPU/メモリ使用量が多い原因を調査するため、Apigee サポートに連絡して、スレッドダンプ、ヒープダンプ、Message Processor のログ(/opt/apigee/var/log/edge-message-processor/logs/system.log)を提供してください。

原因: Router と MP の間の SSL 構成が正しくない

診断

  1. NGINX Access ログ(/opt/apigee/var/log/edge-router/nginx/ORG-Env._access_log)を確認します。次のように 502 レスポンスが表示されます。
        2019-07-23T12:13:42+03:00	sc-10-254-226-23	10.X.X.X:53634	10.X.X.X:8998	0.000	-	-	502	502	189	344	GET <path> curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2	<host alias>	mp-10-254-226-23-23706-8552529-1	10.129.107.101	-	-	-1	-	-	dc-2	gateway-2	green	-	gateway-2	dc-2	op	pilot	http	-
    
  2. NGINX エラーログ(/opt/apigee/var/log/edge-router/nginx/ORG-Env._error_log)を確認します。次のようなエラーが表示されます。
    	2019/07/30 17:02:24 [error] 7691#7691: *11753633 peer closed connection in SSL handshake while SSL handshaking to upstream, client: X.X.X.X, server: <HostAlias>, request: "GET /no-target HTTP/1.1", upstream: "https://X.X.X.X:8998/no-target", host: "<HostAlias>"
    
  3. これは、Router と Message Processor 間の SSL handshake が失敗することを示しています。
  4. 手順 1 と手順 2 のエラー メッセージをよく確認すれば、Message Processor との通信に使用されるポート番号は 8998 です。これは非セキュアなポートですが、プロトコルは SSL(https)です。通常、使用されるセキュアポート番号は 8443 です。非セキュアなポートはセキュアな通信に使用されるため、SSL handshake が失敗します。
  5. これは通常、Router と Message Processor の間で SSL を構成するときに、なんらかの手順を省略したり、誤った値を設定したりした場合に発生することがあります。こちらに記載されている手順をご覧ください。
    たとえば、
    の場合に、このエラーが発生します。 <ph type="x-smartling-placeholder">
      </ph>
    1. /opt/apigee/customer/application/message-processor.properties as shown below
      でポート番号が 8443 ではなく 8998 として指定されている
              conf/message-processor-communication.properties+local.http.port=8998
      
    2. /opt/nginx/conf.d/* ディレクトリにある Router 構成ファイルは削除されず、SSL 構成の実行中に Router は再起動されていません。このシナリオでは、Message Processor のポート番号が構成ファイルで 8998 のままであることがわかります。

解決策

  1. Router と Message Processor 間の TLS の構成に記載されているすべての手順に正しく従っていることを確認してください。
  2. 問題が解決しない場合は、診断情報の収集に進みます。

原因: バックエンド サーバーからのエラー

診断

  1. このエラーが毎回発生する場合は、失敗したリクエストの UI トレースをキャプチャできます。失敗したリクエストを選択し、トレースのさまざまなフェーズを移動します。バックエンド サーバー自体から「502 Bad Gateway」と表示される場合は、バックエンド サーバーでなんらかの障害が発生した可能性があります。
    バックエンド サーバーからの 502 Bad Gateway(不正なゲートウェイ)を示すトレース
  2. 問題が断続的に発生し、トレースをキャプチャできない場合は、
    <ph type="x-smartling-placeholder">
      </ph>
    1. Public Cloud をご利用の場合は、API Monitoring を使用して 502 エラーの詳細を確認できます。
      1. 障害コードが messaging.adaptors.http.flow.ErrorResponseCode で障害ソースが target の場合、エラーの原因はバックエンド サーバーです。
    2. プライベート クラウド ユーザーの場合、NGINX Access ログを分析できます。
      /opt/apigee/var/log/edge-router/nginx/ORG-Env._access_log.
      失敗したリクエストのエントリが次のように表示されます。
      2017-02-24T14:42:12+00:00	rt-01	192.8.155.2:18118	192.168.84.166:8998	10.225	-	-	502	502	440	0	GET /adv-eadlg-test/documents?type=doctype HTTP/1.1	rt-02efawae234-1234	Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36	myorg-dev.apigee.net	 rt-02efawae234-1234	6	-	false	target	messaging.adaptors.http.flow.ErrorResponseCode	null/null	-	/organizations/myorg/environments/dev/apiproxies/api123
      
      <ph type="x-smartling-placeholder">
        </ph>
      1. 障害コードが messaging.adaptors.http.flow.ErrorResponseCode で障害ソースが target の場合、エラーの原因はバックエンド サーバーです。

解決策

  1. バックエンド サーバー チームと協力して、バックエンドで発生している問題を解決してください。

診断情報の収集

  1. NGINX Access ログ
    (/opt/apigee/var/log/edge-router/nginx/ORG-Env._access_log)
    エラーログ
    /opt/apigee/var/log/edge-router/nginx/ORG-Env._error_log)。
  2. Message Processor のログ
    /opt/apigee/var/log/edge-message-processor/logs/system.log)。