【问题标题】:Spring Boot Application deployed on Elastic Beanstalk Java environment returns 502部署在 Elastic Beanstalk Java 环境中的 Spring Boot 应用程序返回 502
【发布时间】:2016-10-11 20:46:49
【问题描述】:

我正在尝试使用 AWS 的 Java 配置(不是他们的 Tomcat 配置)在 AWS Elastic Beanstalk 上部署一个非常简单的 Spring Boot 应用程序,但我不断收到以下日志的 502 错误:

2016/06/10 02:00:14 [error] 4921#0: *1 connect() failed 
(111: Connection refused) while connecting to upstream, client: 38.94.153.178,   
server: , request: "GET /test HTTP/1.1", upstream:   "http://127.0.0.1:5000/test",
host: "my-single-instance-java-app.us-east-1.elasticbeanstalk.com"

我尝试通过 Spring 的 application.properties 将我的端口设置为日志所需的值(5000,使用 server.port=5000)并验证我的应用程序在 localhost 上的该端口上成功运行。

This question 非常相似,只是我部署的是 JAR 而不是 WAR。似乎我在配置 Nginx 方面缺少一些东西,我不知道如何继续。

这是我的 Spring 应用程序:

@SpringBootApplication
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

    @RestController
    public static class MainController {

        @RequestMapping("/test")
        public String testMethod() {
            return "Method success!";
        }
    }
}

【问题讨论】:

  • 你能粘贴你的安全组规则吗?
  • 我不确定这是否是您要求的,但我有两个角色:角色:aws-elasticbeanstalk-ec2-role 权限:AWSElasticBeanstalkWebTier AWSElasticBeanstalkMulticontainerDocker AWSElasticBeanstalkWorkerTier 角色:aws-elasticbeanstalk-service-角色权限:AWSElasticBeanstalkEnhancedHealth AWSElasticBeanstalkService
  • 不,这是我想要你的 EC2 实例的安全组的角色。
  • 我仍然不太确定这是否是您要求的imgur.com/a/RwXgk
  • Ok 在入站中为 TCP 端口 5000 "0.0.0.0/32" 添加安全规则

标签: amazon-web-services nginx spring-boot port amazon-elastic-beanstalk


【解决方案1】:

Nginx 不知道您的 Spring Boot 应用程序在哪个端口上运行。 通过在最后一步添加“server.port=5000”到 application.properties 或其他建议的方式,使应用程序在 Nginx 默认重定向到的端口 5000 上运行:

https://pragmaticintegrator.wordpress.com/2016/07/12/run-your-spring-boot-application-on-aws-using-elastic-beanstalk/

【讨论】:

  • 我的 spring boot 应用程序在默认端口上运行我打开了安全组仍然是同样的问题(坏网关)
【解决方案2】:

根据您的问题描述和您发送给我的安全组设置,您的 EC2 实例的唯一入站端口 80 已通过防火墙向世界开放,您的应用程序使用端口 5000。因此,使用我给您的安全规则,它也为您的 EC2 实例打开了入站端口 5000,因此您的应用程序开始工作而不会出现上述错误。

【讨论】:

  • 流量不是应该通过80端口进入服务器,nginx将流量转发到5000端口的嵌入式应用服务器吗?似乎您不想公开端口 5000。我想知道如果您为端口 5000 添加了“127.0.0.1/0”的规则,这是否可行。 docs.aws.amazon.com/AWSEC2/latest/UserGuide/… 上没有提到这个
【解决方案3】:

如果有人在设置 server.port=5000 后仍然收到此类错误。 如果您有数据库连接,您可以执行以下操作:

  1. 在仪表板的配置部分,转到 RDS 部分并创建一个远程数据库。记住形成的数据库的用户名、密码。

  2. 在软件部分,添加以下属性:

SPRING_DATASOURCE_URL=jdbc:mysql://(your-db-url)/ebdb

SPRING_DATASOURCE_USERNAME=(用户名)

SPRING_DATASOURCE_PASSWORD=(密码)

SPRING_JPA_HIBERNATE_DDL_AUTO=更新

SPRING_JPA_DATABASE_PLATFORM=org.hibernate.dialect.MySQL5Dialect

【讨论】:

    【解决方案4】:

    在阅读了 eb-engine.log 和 nginx/error.log 之后,默认的 nginx 端口是 5000 而 spring-boot 的默认端口是 8080。

    我们可以通过弹性 beanstalk CLI 使用 setenv cmd 更新我们的应用程序。

    eb setenv SERVER_PORT=5000
    

    我们可以通过 application.properties 在代码中更新它

    server.port=5000
    

    【讨论】:

      猜你喜欢
      • 2019-09-25
      • 2019-07-27
      • 2019-03-08
      • 2020-07-05
      • 2017-09-28
      • 2020-11-09
      • 2021-01-17
      • 2016-10-06
      • 2021-06-22
      相关资源
      最近更新 更多