AWS Elastic Beanstalk - tomcat java spring boot 应用程序的问题
Posted
技术标签:
【中文标题】AWS Elastic Beanstalk - tomcat java spring boot 应用程序的问题【英文标题】:AWS Elastic Beanstalk - Problem with tomcat java spring boot application 【发布时间】:2019-04-20 09:10:27 【问题描述】:您知道我无法访问托管在 Amazon Elastic Beanstalk 上的应用程序吗?
配置:Tomcat 8.5 和 Java 8 在 64 位 Amazon Linux/3.0.6 上运行 我的应用:Java Spring Boot 应用
在我的本地主机上,一切正常。
我在 application.properties 文件中设置了 server.port = 5000。
当我尝试使用链接获取我的应用登录页面时:
http://testenv-env.eu-west-1.elasticbeanstalk.com/employee/login
我收到了 404 错误:
HTTP 状态 404 – 未找到 输入状态报告
留言/员工/登录
但是当我向链接添加端口时:
http://testenv-env.eu-west-1.elasticbeanstalk.com:5000/employee/login
错误是:无法访问此站点。
我的安全组配置:
/var/log/tomcat8/localhost_access_log.txt
127.0.0.1 - - [17/Nov/2018:10:19:04 +0000] "GET / HTTP/1.1" 404 1074
127.0.0.1 - - [17/Nov/2018:10:21:16 +0000] "GET /employee/login HTTP/1.1" 404 1092
127.0.0.1 - - [17/Nov/2018:10:29:02 +0000] "GET / HTTP/1.1" 404 1074
127.0.0.1 - - [17/Nov/2018:10:29:56 +0000] "GET /employee/login HTTP/1.1" 404 1092
/var/log/httpd/error_log
[Sat Nov 17 10:19:18.529071 2018] [mpm_worker:notice] [pid 3716:tid 140569196038208] AH00295: caught SIGTERM, shutting down
[Sat Nov 17 10:19:22.241929 2018] [ssl:warn] [pid 25414:tid 140137380542528] AH01873: Init: Session Cache is not configured [hint: SSLSessionCache]
[Sat Nov 17 10:19:22.243341 2018] [mpm_worker:notice] [pid 25414:tid 140137380542528] AH00292: Apache/2.4.34 (Amazon) OpenSSL/1.0.2k-fips configured -- resuming normal operations
[Sat Nov 17 10:19:22.243372 2018] [core:notice] [pid 25414:tid 140137380542528] AH00094: Command line: '/usr/sbin/httpd'
和我的 pom.xml 依赖项:
<groupId>com.project</groupId>
<artifactId>iam</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>iam</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>bootstrap</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
【问题讨论】:
【参考方案1】:第一步是检查您的网址
http://iam-env.eu-west-1.elasticbeanstalk.com/employee/login
本身看起来不正确。这太笼统了,不可能是对的。我建议您查看 AWS Beanstalk 所有应用程序屏幕。在正确环境右侧显示的框中,您会找到类似这样的 URL
https://test-env.asu2mcXXrr.eu-west-2.elasticbeanstalk.com
【讨论】:
是的,是的。但是在我的应用程序控制器中,我为 login.jsp 视图定义了 /employee/login。 是的,您需要先找到 URI,然后将路径附加到它。我希望你已经尝试过那个......就像...... test-env.asu2mcXXrr.eu-west-2.elasticbeanstalk.com/employee/…【参考方案2】:@michal9225 你只需要设置路由。 发生的情况是 beanstalk URL 期望您的应用程序在端口 80 上运行,并且在我们的本地系统中开发应用程序时,我们通常会更改端口,因为我们的其他应用程序或服务可能在大多数常见端口上运行。
所以现在你有两个选择:-
1- 设置负载均衡器并将 5000 端口路由到 80,然后通过负载均衡器 URL 访问应用程序
2- 从 Application.property 文件中将端口从 5000 更改为 80 (server.port = 80)
【讨论】:
并配置关于 80 端口的入站规则以上是关于AWS Elastic Beanstalk - tomcat java spring boot 应用程序的问题的主要内容,如果未能解决你的问题,请参考以下文章
将 Socket.IO 与 HTTPS 和 AWS Elastic Beanstalk 一起使用
我在 AWS Elastic BeanStalk Tomcat 6 服务器上使用啥版本的 J2EE?
Amazon Elastic BeanStalk 错误:无法创建 AWS Elastic Beanstalk 应用程序版本