使用Spring Boot获取带有EBS的502运行单个实例,端口已经打开

时间:2017-05-31 03:36:08

标签: spring amazon-web-services spring-boot amazon-ec2

我在spring-boot项目中有一个设置。

我已经编辑了部署脚本以上传JAR文件,而不是整个源。

当我进入EBS日志时,我可以看到我的服务器正在运行。

我已经设置了SERVER_PORT,我可以从EBS日志中看到Tomcat在端口5000中运行。

奇怪的是,即使点击EC2实例的公共IP也给了我一个502.

你们可以帮助我从支票清单中删除更多东西吗?

1 个答案:

答案 0 :(得分:0)

是的,听起来像Elastic Beanstalk对我来说。所以,下面我会假设它是。

  

我没有配置EC2实例,直接用端口80命中EC2实例给了我502.

这意味着你的服务器前面有nginx(或类似的)。它的nginx响应502,而不是你的应用。

  

最终输出端口5000和8080次。

这实际上是502响应的原因--nginx尝试将请求传递给您的应用,但是超时然后用#34; 502 Bad Gateway"做出响应。

Elastic Beanstalk在EC2实例内的docker容器中运行您的应用程序。然后使用nginx(在实际的EC2实例上运行并充当反向代理)使您的应用程序可以在EC2实例之外访问(例如,您的负载均衡器可见)。我担心这种设置的内部工作有点太复杂,无法回答答案。但是,简而言之,您必须首先检查5000是nginx用于查找您的应用程序的正确端口。请注意,它可以在" Beanstalk支持的平台"之间变化,例如对于Go平台它是3000(如果我的记忆是正确的)。其次,确保此端口在docker文件中公开。第三,确保您的spring boot应用程序侦听该端口。

这似乎是一篇很好的短文供您参考:https://pragmaticintegrator.wordpress.com/2016/07/12/run-your-spring-boot-application-on-aws-using-elastic-beanstalk/

而且,在最糟糕的情况下,您可以尝试将其打包为战争,并使用Beanstalk" Java与Tomcat"平台。使用起来有点简单,因为您不需要打扰端口。