2017-05-31 65 views
0

我有一个设置在spring-boot项目中的地方。通过Spring Boot获得一个带有Spring Boot的EBS 502运行单实例,端口已经打开

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

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

我已经设置了SERVER_PORT,我可以从Tomcat是否在端口5000

奇怪的事情是运行,甚至打到EC2实例的公共IP EBS的日志中看到是给我一个502

你们能帮我从检查清单中抽出更多的东西吗?

+0

您是否检查过服务器是否可以访问服务。你是否收到502错误的应用程序日志? –

+0

令人惊讶的是,502状态并不总是来自服务器。有时它来自代理(甚至某些路由器),当它出错或无法正确解释答案时。在你的情况下,我怀疑502真的来自春季启动应用程序,因为嵌入式tomcat在这种情况下不作为网关(因此502并不完全合法)。所以,是的,在您的应用程序中启用访问日志,并查看您是否可以在日志中找到您的请求。我还建议尝试从另一个网络(例如家中)排除行为不当的代理。 – Seva

+0

我假设我们正在谈论普通的EC2实例,而不是Elastic Beanstalk。而且你没有在你的web应用程序前配置nginx或类似的东西。这是对的吗?对不起,如果这些是愚蠢的问题。刚刚502将是一个春季启动应用程序非常奇怪的回应。所以,我想确保我们不会错过一些重要的东西,你可能已经忘记了。 – Seva

回答

0

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

我没有配置EC2实例,并直接击中端口80 EC2实例给了我502

这意味着你必须在你的服务器的前面nginx的(或类似)。这是nginx与502响应,而不是你的应用程序。

端口5000和8080最终超时。

这实际上是502响应的原因--nginx尝试将请求传递到您的应用程序,但超时然后用“502错误网关”响应。

Elastic Beanstalk在EC2实例内的Docker容器中运行您的应用程序。然后使用nginx(在实际的EC2实例上运行并充当反向代理)使您的应用可以在EC2实例之外访问(例如,您的负载均衡器可见)。恐怕这种设置的内部工作有些复杂,不适合答案。但简而言之,您必须首先检查5000是否是nginx将用于查找您的应用程序的正确端口。请注意,“Beanstalk支持的平台”可能会有所不同,例如Go平台的版本为3000(如果我的记忆是正确的)。其次,确保这个端口暴露在您的docker文件中。第三,确保你的spring启动应用程序在该端口上侦听。

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

和好,在最坏的情况下,你可以再尝试它打包为一个战争,而不是使用和青苗的“与Java雄猫”平台。使用起来更简单一些,因为您不需要担心端口。

+0

我很笨。该应用程序之前运行,但是当我重建环境以从EBS删除RDS依赖项时,它启动时遇到问题。 – dzjin

+0

我不认为你是愚蠢的。我花了相当多的时间学习EBS的内部工作。我可以说它配置得非常好。它对我来说非常有用,而它只是一个简单的网络应用程序。但是我自己已经停止使用EBS了,原因是配置的任何严重变化(以适应不断变化的需求和要求)很快变得过于复杂。那么,您是否设法修复数据库连接? EBS包括自己的RDS支持,但您应该可以轻松地连接到EBS之外的RDS。它不会被EBS管理。 – Seva