簡體   English   中英

502 帶有 nginx 的錯誤網關 | 谷歌應用引擎 | 節點JS

[英]502 Bad Gateway with nginx | Google App Engine | Node JS

我正在使用 App Engine 在 Google Cloud Platform 上托管 Web 應用程序,並且正在使用托管在 mLab 上的 ExpressJS 和 MongoDB。

直到 2017 年 1 月 1 日,一切都運行良好。 我之前有 vm:true,現在被迫將 env 更改為 flex。 現在我收到 nginx 的 502 bad gateway 錯誤。 應用引擎不允許我們更改 nginx 配置文件。

我已經嘗試過這篇文章的建議: Google App Engine 502 (Bad Gateway) with NodeJS ,但仍然無法正常工作。

出於某種原因,我在應用程序引擎上有另一個具有完全相同設置的應用程序,它運行良好。

任何建議將不勝感激。 謝謝你。

應該始終收聽端口8080,谷歌轉發所有請求從80到8080 https://cloud.google.com/appengine/docs/flexible/custom-runtimes/build#listen_to_port_8080

檢查日志中是否存在任何部署錯誤

$ 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中的錯誤還有助於診斷啟動失敗的確切原因。

將主機設置為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,在部署時,它應該是http服務器而不是https

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

Google App Engine使用nginx前端來加載平衡node.js應用程序的所有請求。 使用nginx作為轉發代理,當用戶在瀏覽器中發出的請求到達nginx(您看到無格式的502錯誤網關錯誤頁面)時,通常會發生此錯誤,但是nginx服務器無法正確地將請求轉發給您節點應用。 可能存在許多問題,為什么會發生這種情況,但這里有一些常見問題:

  1. 默認情況下,App Engine假定您的節點應用程序在8080上運行.nginx本身將在80上運行並將請求轉發到8080.檢查您的應用程序的端口號是否為8080。

  2. 您的app可能具有定義為域something.appspot.com或IP 127.18.21.21等的hostname server.listenconfig.jsonvhost 刪除任何主機名。 App Engine將負責域名,IP等,因此您不必這樣做。

  3. 您的應用在向nginx發送響應之前可能會崩潰。 檢查nginx和節點應用程序的日志。

要查看日志/了解正在進行的操作,請使用此指南https://cloud.google.com/appengine/docs/flexible/nodejs/debugging-an-instance#connecting_to_the_instance直接在應用程序引擎后面的VM中進行SSH。 將有一個使用nginx的docker進程,您可以在其中查看nginx錯誤日志和一個與您的節點應用程序的docker映像,以檢查節點應用程序的錯誤消息。

我只是想知道,根據這個問題的活動和時間戳,為什么谷歌沒有更新其文檔來涵蓋這個問題! ???

就我而言,由於谷歌應用程序引擎更新導致我的 React SPA 自動重新部署到谷歌雲虛擬機,我遇到了同樣的錯誤。 然后由於node 16.xx的運行時不兼容而導致構建失敗。 兼容的運行時是node 14.19.0 我必須在我的package.json文件中指定節點版本並再次進行部署以修復502 Bad Gateway錯誤。

{
  "engines": {
    "node": "14.19.0"
  }
}

另請參考:

希望這對遇到 React SPA 問題的人有所幫助。

創建一個服務器,然后檢查三元條件,如果當前環境是否生產,如果當前環境是開發,則分配端口'80',否則分配process.env.NODE.ENV。

const app = require('express')();
        const server = require('http').Server(app);
        const port = process.env.NODE_ENV === 'production' ? process.env.PORT :'80';
        server.listen(port, ()=> {
          console.log('listening on port number  *:' + server.address().port);
         });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM