在 AWS Elastic Beanstalk 上部署 Spring Boot 应用程序 — 出现 502 错误

Posted

技术标签:

【中文标题】在 AWS Elastic Beanstalk 上部署 Spring Boot 应用程序 — 出现 502 错误【英文标题】:Deploying Spring Boot app on AWS Elastic Beanstalk — getting 502 error 【发布时间】:2019-09-25 14:17:29 【问题描述】:

我知道,这里有很多这样的问题和答案,但没有一个对我有帮助。我尝试在 AWS Elastic Beanstalk 上安装我的简单 Spring Boot 应用程序。有一个限制:它必须使用.jsp 模板,所以它是.war,而不是.jar。如果我在 Elastic Beanstalk 上使用预定义的 Tomcat 环境,一切正常,但我的目标是使用 Java 环境。

当我安装我的应用程序时,它的状态是Degraded,当我尝试访问该 url 时我变成了 502。

本地一切都很完美。

我将application.properties 中的端口更改为5000,但没有帮助。我找到了一个建议,为 TCP Port 5000 "0.0.0.0/32" 使用入站安全规则,但它没有帮助。

这是我的pom.xml 依赖项:


    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.eclipse.jdt.core.compiler</groupId>
            <artifactId>ecj</artifactId>
            <version>4.6.1</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

application.properties:

spring.mvc.view.prefix=/WEB-INF/view/
spring.mvc.view.suffix=.jsp
server.port=5000

Java 主类:

@SpringBootApplication
public class DemowebApplication extends SpringBootServletInitializer 

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) 
        return application.sources(DemowebApplication.class);
    

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



AWS 错误日志:

2019/05/07 21:04:45 [error] 7827#0: *19 connect() failed (111: Connection refused) while connecting to upstream, client: 91.232.158.8, server: , request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:5000/", host: "my-endpoint-tst.us-east-2.elasticbeanstalk.com"
2019/05/07 21:04:46 [error] 7827#0: *19 connect() failed (111: Connection refused) while connecting to upstream, client: 91.232.158.8, server: , request: "GET /favicon.ico HTTP/1.1", upstream: "http://127.0.0.1:5000/favicon.ico", host: "my-endpoint-tst.us-east-2.elasticbeanstalk.com", referrer: "my-endpoint-tst.us-east-2.elasticbeanstalk.com/"

我怀疑问题出在我的 Tomcat 配置上,但我对它的所有实验都没有帮助。

【问题讨论】:

***.com/questions/37755765/… 这可能是您的安全组的问题。请打开端口 5000 的入站规则。 是的,我看到了该建议并做到了,但 id 没有帮助:Custom TCP Rule TCP 5000 0.0.0.0/32 能否请您选择 HTTP 80 0.0.0.0/0 和 ::/0 并尝试一下。 它没有帮助( 【参考方案1】:

我也有类似的问题。我会将 JAR 加载到 Elastic Beanstalk 中,当我尝试访问 URL 时,我会收到 502 Apache 错误和降级状态。在本地,我设置为端口 8080,但是当我尝试通过我的 URL 访问它时,我得到了 502。我的问题是:

1) 当我导出它时,我没有从我的 IDE 导出和上传胖 .JAR 文件。我知道您说过您不能使用 .JAR,但只要确保在导出项目时,您还使用它从 Maven 导出所有依赖项。

2)这可能比这个答案的第一部分有更大的帮助,但即使我将我的端口放在 application.properties 中,它也没有拉到 Elastic Beanstalk 实例。我最终成功解决这个问题的方法是进入 AWS 的管理控制台,进入我的 Beanstalk 实例,然后进入配置选项卡。

在配置选项卡上有一个软件部分,在该子部分中,转到环境属性。在环境属性的名称部分,输入SERVER_PORT,对于值部分,输入5000。单击应用并让实例重新启动。

【讨论】:

以上是关于在 AWS Elastic Beanstalk 上部署 Spring Boot 应用程序 — 出现 502 错误的主要内容,如果未能解决你的问题,请参考以下文章

在 AWS Elastic Beanstalk 上扩展 Magento

如何在 AWS Elastic Beanstalk 上设置 HTTPS

如何在 AWS Elastic Beanstalk 上设置 HTTPS

在 AWS Elastic Beanstalk 上运行节点和反应

如何使用 aws cli 在 Elastic Beanstalk 上上传和部署?

在aws elastic beanstalk上上传文件?