登录
首页 >  Golang >  Go问答

AWS Elastic Beanstalk启动的Golang服务器遇到504网关超时错误

来源:stackoverflow

时间:2024-03-22 16:33:35 350浏览 收藏

在 AWS Elastic Beanstalk 上运行的 Go 服务器在执行耗时超过 60 秒的进程时遇到 504 网关超时错误。错误是由 Nginx 代理在等待上游应用程序响应时超时造成的,可能是因为代理试图访问应用程序未侦听的端口或应用程序已崩溃。

问题内容

我在这台机器上有一个在 aws elastic beanstalk 上运行的 golang web 服务器:go 1 在 64 位 amazon linux 2 上运行; 当我向服务器发出请求并且它执行多个进程时会发生错误,因此完成整个过程大约需要 90 秒,因此 60 秒后 aws beanstalk 服务器结束客户端连接并返回以下错误,尽管该过程90秒后完全结束。 它发送以下错误:


 

   504 gateway time-out

 

   

504 gateway time-out

源应用程序文件:

.
├── application.go
├── cron.yaml
└── public
    └── index.html

当我在本地机器上测试它时,它运行良好并且需要 90 秒,只有当它在 beanstalk 上运行时才会出现此问题。 我该如何解决它??


正确答案


504 gateway timeout 表示 nginx 代理等待上游应用程序响应的时间过长。如果这种情况发生在通常几秒后返回的端点上,则 nginx 代理很可能正在尝试访问您的应用程序未侦听的端口(或者应用程序已崩溃)。

默认情况下,elastic beanstalk 将 nginx 代理配置为在端口 5000 上将请求转发到您的应用程序。您可以通过将 port 环境属性设置为主应用程序侦听的端口来覆盖默认端口。更多信息:AWS Reverse Proxy Docs

确保您的应用程序代码侦听正确的端口。

http.listenandserve(":5000", nil);

造成这种情况的另一个原因可能是应用代码崩溃。检查 elastic beanstalk 中的最后 100 条日志行。您还可以通过 ssh 连接到服务器并运行 cat /var/log/eb-engine.log 来检索日志。

反向代理

另外,您似乎正在尝试静态托管 /public/index.html。您可以通过两种不同的方式来完成此操作。

  1. 使用 go(不推荐)
http.handle("/", http.fileserver(http.dir("./static")))
http.listenandserve(":3000", nil)
  1. 使用 nginx(推荐)

通过扩展 nginx 配置,您可以使用代理服务器静态托管文件并在路由到达您的服务器应用程序之前重定向路由。

~/workspace/my-app/
|-- .platform
|   `-- nginx
|       `-- conf.d
|           `-- myconf.conf

今天关于《AWS Elastic Beanstalk启动的Golang服务器遇到504网关超时错误》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>