带有NodeJS的Google App Engine 502(Bad Gateway)
我有一个完整的Web应用程序,使用NodeJS,MongoDB(Mongoose作为驱动程序)和ExpressJS。
该项目在我的本地机器上完美工作。 今天,我决定把一切都转移到生产上。 我使用Google App Engine来托pipe我的应用程序,并使用Compose(正式的MongoHQ)托pipe我的数据库。
尽pipe我的API似乎没有工作,App Engine完美地服务于我的应用程序。 我的API是从example.com/api
,每个请求( GET
, POST
, DELETE
和PUT
)都会返回502(错误网关)错误。
我试图在我的本地机器上运行我的应用程序,同时连接到我的远程MongoDB数据库,这工作得很好。 所以它一定是App Engine或NodeJS的问题,而不是MongoDB。
我曾尝试检查Google Cloud中的所有错误日志,虽然没有错误。
为什么App Engine / NodeJS为我的应用程序的静态内容提供完美的服务,尽pipe不允许对我的API发出任何请求?
502错误的网关通常是Nginx端的错误。 不幸的是,这些日志还没有出现在云端日志logging中。
很多时候问题是你的HTTP数据包对于缓冲区或类似的东西来说太大了。 你可以看到nginx日志的方式是这样的:
- 只使用1个虚拟机。 这不是绝对必要的,但是如果你知道你在一台机器上的请求,很多时候它可以更容易地debugging你的应用程序。 您可以通过将此添加到您的app.yaml来完成此操作:
manual_scaling: instances: 1
然后重新部署
-
将虚拟机从“Google拥有”切换到自我pipe理。 这可以在云控制台中完成。 转到计算引擎实例,单击与App Engine版本匹配的实例名称,您应该看到一个选项将其切换为自我pipe理。
-
gcloud compute ssh <instance name>
以SSH连接到计算机 -
docker ps
来查看你正在运行的容器。 find名为nginx的容器并获取它的id。 -
一旦你有一个容器ID,你应该能够
docker exec -it <container id> -- cat /var/log/nginx/error.log
。 你可能想要整个日志目录。
你可能会看到一个错误,这将是一个更大的提示,以什么是错的。
我知道这是比它应该更复杂: – \如果您有任何问题上面的步骤,留下评论。 如果你发现一个错误,你不知道该怎么办,也请留下评论。