一尘不染

带有NodeJS的Google App Engine 502(错误网关)

node.js

我有一个使用NodeJS,MongoDB(以Mongoose作为驱动程序)和ExpressJS的完整Web应用程序。

该项目可以在我的本地计算机上完美运行。今天,我决定将一切都投入生产。我正在使用Google App
Engine托管我的应用程序,并使用Compose(以前是MongoHQ)托管我的数据库。

尽管我的API似乎不起作用,但App
Engine可以完美地为我的应用程序提供服务器。我的API是从服务example.com/api,并且每个请求(GETPOSTDELETEPUT)所有返回一个502(坏网关)错误。

我尝试在连接到远程MongoDB数据库的同时在本地计算机上运行应用程序,并且运行良好。因此,App
Engine或NodeJS一定是问题,而不是MongoDB。

我尝试检查Google Cloud中的所有错误日志,尽管没有错误。

为什么App Engine / NodeJS可以很好地为我的应用程序提供静态内容,但不允许对我的API发出任何请求?


阅读 243

收藏
2020-07-07

共1个答案

一尘不染

502 Bad Gateway通常是Nginx方面的错误。不幸的是,这些日志尚未浮出水面。

很多时候,问题在于您的HTTP数据包太大,无法容纳缓冲区或类似内容。您看到nginx日志的方式是这样的:

  • 仅使用1个VM。这不是严格必要的,但是很多时候,如果您知道自己在一台计算机上的请求,则可以更轻松地调试应用程序。您可以通过将其添加到您的app.yaml中来完成此操作:

manual_scaling: instances: 1 然后重新部署

  • 将虚拟机从“ Google拥有”切换到自我管理。这可以在Cloud Console中完成。转到Compute Engine实例,单击与App Engine版本匹配的实例名称,您应该会看到一个选项,可将其切换为自我管理。

  • gcloud compute ssh <instance name> SSH到机器

  • docker ps查看您正在运行的容器。查找名为nginx的容器并获取其ID。

  • 有了容器ID后,您应该可以docker exec -it <container id> -- cat /var/log/nginx/error.log。您可能需要ls整个日志目录。

您可能会看到一个错误,这将对发生的问题有更大的提示。

我知道这比应该的要复杂得多:-\如果您对上述步骤有任何疑问,请发表评论。如果您确实发现了错误,但不确定如何处理,请发表评论。

2020-07-07