web-dev-qa-db-ja.com

nginxを使用した502 Bad Gateway | Google App Engine | Node JS

App Engineを使用してGoogle Cloud Platformでウェブアプリをホストし、mLabでホストされているExpressJSとMongoDBを使用しています。

2017年1月1日まではすべてうまくいきました。以前はvm:trueでしたが、今度はenvをflexに変更することを余儀なくされました。現在、nginxで502 bad gatewayエラーが発生しています。 App Engineでは、nginxの構成ファイルを変更することはできません。

私はこの投稿からの提案を試みました: Google App Engine 502(Bad Gateway)with NodeJS しかし、まだ動作しません。

何らかの理由で、App Engineでまったく同じ設定の別のアプリがあり、完全に機能します。

どんな提案も大歓迎です。ありがとうございました。

29
NodejsNewbie

アプリは常にポート8080をリッスンする必要があり、Googleは80から8080へのすべてのリクエストを転送します https://cloud.google.com/appengine/docs/flexible/custom-runtimes/build#listen_to_port_808

17
Deepak Patil

展開エラーのログを確認します

$ gcloud app logs read

このチュートリアルで提供されているコードで同様の問題に遭遇しました( https://cloud.google.com/nodejs/getting-started/authenticate-users

そして、不足している依存関係があることがわかりました。不足している依存関係を修正し、アプリがデプロイされて正常に動作するようになりました。

問題の詳細: https://github.com/GoogleCloudPlatform/nodejs-getting-started/issues/106

12
SRAVAN

Expressでも同じ問題が発生しました。私にとってそれを解決したのは、アプリのIPアドレスを提供しないことでした。

だから私の古いコードは次のようになります:

var ip = "127.0.0.1";
var port = "8080";
var server = http.createServer(app);
server.listen(port, ip);

これにより、アプリエンジンで502が発生します。

IPを削除することは私にとって解決策でした。

server.listen(port);
3

502は必ずしもnginx自体のエラーではなく、ほとんどの場合、nginxプロキシがアプリコンテナーと通信できない場合に発生します(通常、アプリの起動に失敗したため)。 「env:flex」への移行後に502を取得する場合、 最新のApp Engineフレキシブル環境リリースへのアップグレード で説明したように、アプリで必要なコード変更が原因である可能性が高いです。

NPMからのエラーについて application logs を確認すると、起動に失敗した正確な理由を診断するのにも役立ちます。

2
Adam

Google App Engineは、nginxフロントを使用して、node.jsアプリに対するすべてのリクエストの負荷を分散します。 nginxがフォワードプロキシとして機能している場合、このエラーは通常、ユーザーがブラウザーで行っているリクエストがnginxに到達したときに発生します(スタイル設定されていない502 bad gatewayエラーページが表示されます)が、nginxサーバーはリクエストを正しく転送できませんノードアプリ。これが起こっている理由はたくさんありますが、よくある問題を以下に示します。

  1. デフォルトでは、App Engineはノードアプリが8080で実行されていると想定します。nginx自体は80で実行され、リクエストを8080に転送します。アプリのポート番号が8080であるかどうかを確認します。

  2. アプリには、ドメインsomething.appspot.comまたはIP 127.18.21.21などのように定義されたhostnameがあります。 server.listenまたはconfig.jsonまたはvhostどこからでもホスト名を削除します。 App EngineはドメインやIPなどを管理するため、必要はありません。

  3. アプリは、nginxに応答を送信する前にクラッシュする可能性があります。 nginxとノードアプリの両方のログを確認します。

ログを確認したり、何が起こっているかを調べるには、このガイドを使用してください https://cloud.google.com/appengine/docs/flexible/nodejs/debugging-an-instance#connecting_to_the_instance VMアプリエンジンの背後にあります。nginxエラーログとノードアプリの1つのdockerイメージを確認できるnginxのdockerプロセスが1つあり、ノードアプリのエラーメッセージを確認できます。

この質問のアクティビティとタイムスタンプに基づいて、Googleがこの問題をカバーするためにドキュメントを更新していないのはなぜだろうか。 ???

0
Gaurav Ramanan

ホストを0.0.0.0に設定します

ポート8080は、デフォルトでエンジンによって設定されます。実際、予約されている環境var PORTを定義することはできません。

次のコマンドを実行します(@sravanで述べたとおり)

gcloud app logs read tail

そして、それがこのように見えることを確認してください、

[Sun May 27 2018 10:32:44 GMT+0000 (UTC)] serving app on 0.0.0.0:8080

乾杯

0

Httpにも注意してください。デプロイ中はhttpsではなくhttpサーバーである必要があります。

  var server;
  if (process.env.NODE_ENV == "dev") {
    server = https.createServer(httpsOptions, app);
  } else {
    server = http.createServer(app);
  }
0
Shaik Matheen