带有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 ,每个请求( GETPOSTDELETEPUT )都会返回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 。 你可能想要整个日志目录。

你可能会看到一个错误,这将是一个更大的提示,以什么是错的。

我知道这是比它应该更复杂: – \如果您有任何问题上面的步骤,留下评论。 如果你发现一个错误,你不知道该怎么办,也请留下评论。