我有一个使用NodeJS,MongoDB(以Mongoose作为驱动程序)和ExpressJS的完整Web应用程序。
该项目可以在我的本地计算机上完美运行。今天,我决定将一切都投入生产。我正在使用Google App Engine托管我的应用程序,并使用Compose(以前是MongoHQ)托管我的数据库。
尽管我的API似乎不起作用,但App Engine可以完美地为我的应用程序提供服务器。我的API是从服务example.com/api,并且每个请求(GET,POST,DELETE和PUT)所有返回一个502(坏网关)错误。
example.com/api
GET
POST
DELETE
PUT
我尝试在连接到远程MongoDB数据库的同时在本地计算机上运行应用程序,并且运行良好。因此,App Engine或NodeJS一定是问题,而不是MongoDB。
我尝试检查Google Cloud中的所有错误日志,尽管没有错误。
为什么App Engine / NodeJS可以很好地为我的应用程序提供静态内容,但不允许对我的API发出任何请求?
502 Bad Gateway通常是Nginx方面的错误。不幸的是,这些日志尚未浮出水面。
很多时候,问题在于您的HTTP数据包太大,无法容纳缓冲区或类似内容。您看到nginx日志的方式是这样的:
manual_scaling: instances: 1 然后重新部署
manual_scaling: instances: 1
将虚拟机从“ Google拥有”切换到自我管理。这可以在Cloud Console中完成。转到Compute Engine实例,单击与App Engine版本匹配的实例名称,您应该会看到一个选项,可将其切换为自我管理。
gcloud compute ssh <instance name> SSH到机器
gcloud compute ssh <instance name>
docker ps查看您正在运行的容器。查找名为nginx的容器并获取其ID。
docker ps
有了容器ID后,您应该可以docker exec -it <container id> -- cat /var/log/nginx/error.log。您可能需要ls整个日志目录。
docker exec -it <container id> -- cat /var/log/nginx/error.log
ls
您可能会看到一个错误,这将对发生的问题有更大的提示。
我知道这比应该的要复杂得多:-\如果您对上述步骤有任何疑问,请发表评论。如果您确实发现了错误,但不确定如何处理,请发表评论。