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でまったく同じ設定の別のアプリがあり、完全に機能します。
どんな提案も大歓迎です。ありがとうございました。
アプリは常にポート8080をリッスンする必要があり、Googleは80から8080へのすべてのリクエストを転送します https://cloud.google.com/appengine/docs/flexible/custom-runtimes/build#listen_to_port_808
展開エラーのログを確認します
$ gcloud app logs read
このチュートリアルで提供されているコードで同様の問題に遭遇しました( https://cloud.google.com/nodejs/getting-started/authenticate-users )
そして、不足している依存関係があることがわかりました。不足している依存関係を修正し、アプリがデプロイされて正常に動作するようになりました。
問題の詳細: https://github.com/GoogleCloudPlatform/nodejs-getting-started/issues/106
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);
502は必ずしもnginx自体のエラーではなく、ほとんどの場合、nginxプロキシがアプリコンテナーと通信できない場合に発生します(通常、アプリの起動に失敗したため)。 「env:flex」への移行後に502を取得する場合、 最新のApp Engineフレキシブル環境リリースへのアップグレード で説明したように、アプリで必要なコード変更が原因である可能性が高いです。
NPMからのエラーについて application logs を確認すると、起動に失敗した正確な理由を診断するのにも役立ちます。
Google App Engineは、nginxフロントを使用して、node.jsアプリに対するすべてのリクエストの負荷を分散します。 nginxがフォワードプロキシとして機能している場合、このエラーは通常、ユーザーがブラウザーで行っているリクエストがnginxに到達したときに発生します(スタイル設定されていない502 bad gatewayエラーページが表示されます)が、nginxサーバーはリクエストを正しく転送できませんノードアプリ。これが起こっている理由はたくさんありますが、よくある問題を以下に示します。
デフォルトでは、App Engineはノードアプリが8080で実行されていると想定します。nginx自体は80で実行され、リクエストを8080に転送します。アプリのポート番号が8080であるかどうかを確認します。
アプリには、ドメインsomething.appspot.com
またはIP 127.18.21.21
などのように定義されたhostname
があります。 server.listen
またはconfig.json
またはvhost
どこからでもホスト名を削除します。 App EngineはドメインやIPなどを管理するため、必要はありません。
アプリは、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.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
乾杯
Httpにも注意してください。デプロイ中はhttpsではなくhttpサーバーである必要があります。
var server;
if (process.env.NODE_ENV == "dev") {
server = https.createServer(httpsOptions, app);
} else {
server = http.createServer(app);
}