[英]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服務器無法正確地將請求轉發給您節點應用。 可能存在許多問題,為什么會發生這種情況,但這里有一些常見問題:
默認情況下,App Engine假定您的節點應用程序在8080上運行.nginx本身將在80上運行並將請求轉發到8080.檢查您的應用程序的端口號是否為8080。
您的app可能具有定義為域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中進行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.