![](/img/trans.png)
[英]Deploying Spring Boot app on AWS Elastic Beanstalk — getting 502 error
[英]Spring Boot App Fails to Start on Elastic Beanstalk
我正在嘗試在 Elastic Beanstalk 上運行我的 Spring Boot + MySQL 應用程序。 無論我嘗試什么,我都會得到502 Bad Gateway
。 我曾嘗試將 Spring Boot 端口更改為 5000,但似乎根本沒有幫助。
我嘗試在application.properties
添加server.port=5000
。 我也嘗試添加server.port=${PORT}
。
每次我eb deploy
日志時都會顯示:
03:08:21.096 [main] INFO t.t.TrackMyWaterChangeApplication - Starting TrackMyWaterChangeApplication v0.0.1-SNAPSHOT on ip-172-31-41-134 with PID 6105 (/var/app/current/application.jar started by webapp in /var/app/current)
03:08:21.098 [main] INFO t.t.TrackMyWaterChangeApplication - No active profile set, falling back to default profiles: default
03:08:54.024 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data repositories in DEFAULT mode.
03:08:56.577 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 2305ms. Found 4 repository interfaces.
03:09:20.544 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$c95c6ba6] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
03:09:35.665 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 5000 (http)
03:09:36.122 [main] INFO o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-5000"]
03:09:36.533 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat]
03:09:36.533 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.21]
03:09:39.127 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
03:09:39.128 [main] INFO o.s.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 75522 ms
03:09:59.224 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting...
03:10:08.318 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed.
03:10:08.880 [main] INFO org.hibernate.Version - HHH000412: Hibernate Core {5.3.10.Final}
03:10:08.889 [main] INFO org.hibernate.cfg.Environment - HHH000205: Loaded properties from resource hibernate.properties: {hibernate.dialect=org.hibernate.dialect.MySQLDialect, hibernate.bytecode.use_reflection_optimizer=false}
03:10:09.268 [main] INFO o.h.annotations.common.Version - HCANN000001: Hibernate Commons Annotations {5.0.4.Final}
03:10:10.046 [main] INFO org.hibernate.dialect.Dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
03:10:12.003 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default'
03:10:13.291 [main] INFO o.h.h.i.QueryTranslatorFactoryInitiator - HHH000397: Using ASTQueryTranslatorFactory
03:10:14.039 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default'
03:10:14.041 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated...
03:10:14.049 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed.
03:10:14.063 [main] INFO o.a.catalina.core.StandardService - Stopping service [Tomcat]
我的假設是應用程序永遠不會因為最后一行( oacatalina.core.StandardService - Stopping service [Tomcat]
)而啟動。 當我將端口設置為 5000 時,它在本地運行時有效。要部署應用程序,我使用mvn clean package
然后使用eb deploy
。 如果我從 Windows PC 上的命令行運行打包的 JAR,它運行沒有問題。 這是我的pom.xml
文件的<build>
部分:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>themayoras</groupId>
<artifactId>trackmywaterchange</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>trackmywaterchange</name>
<description>Web Project for tracking water change schedules</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<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-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Hibernate Validator -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.17.Final</version>
</dependency>
<!-- thymeleaf -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- AOP -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- Spring Security -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- SL4FJ Logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>${start-class}</mainClass>
<layout>JAR</layout>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
編輯:我在/var/log/nginx/error.log
下收到一條新的日志消息,內容為
Professional SP1 x64|'|'|No|'|'|0.7d|'|'|..|'|'|AA==|'|'|112.inf|'|'|SGFjS2VkDQoxOTIuMTY4LjkyLjIyMjo1NTUyDQpEZXNrdG9wDQpjbGllbnRhLmV4ZQ0KRmFsc2UNCkZhbHNlDQpUcnVlDQpGYWxzZQ==12.act|'|'|AA=="
2019/08/11 16:48:57 [error] 1293#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 35.21.86.49, server: , request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:5000/", host: "trackmywaterchange.us-east-2.elasticbeanstalk.com"
2019/08/11 16:48:57 [error] 1293#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 35.21.86.49, server: , request: "GET /favicon.ico HTTP/1.1", upstream: "http://127.0.0.1:5000/favicon.ico", host: "trackmywaterchange.us-east-2.elasticbeanstalk.com", referrer: "http://trackmywaterchange.us-east-2.elasticbeanstalk.com/"
/var/logs/nginx/error.log
下的日志
2019/08/11 03:16:33 [error] 6663#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 35.21.86.49, server: , request: "GET /favicon.ico HTTP/1.1", upstream: "http://127.0.0.1:5000/favicon.ico", host: "trackmywaterchange.us-east-2.elasticbeanstalk.com", referrer: "http://trackmywaterchange.us-east-2.elasticbeanstalk.com/"
2019/08/11 05:40:09 [warn] 6663#0: *4 using uninitialized "year" variable while logging request, client: 194.32.117.3, server: , request: "GET / HTTP/1.1"
2019/08/11 05:40:09 [warn] 6663#0: *4 using uninitialized "month" variable while logging request, client: 194.32.117.3, server: , request: "GET / HTTP/1.1"
2019/08/11 05:40:09 [warn] 6663#0: *4 using uninitialized "day" variable while logging request, client: 194.32.117.3, server: , request: "GET / HTTP/1.1"
2019/08/11 05:40:09 [warn] 6663#0: *4 using uninitialized "hour" variable while logging request, client: 194.32.117.3, server: , request: "GET / HTTP/1.1"
2019/08/11 13:26:14 [warn] 6663#0: *26 using uninitialized "year" variable while logging request, client: 164.132.153.130, server: , request: "CONNECT i.instagram.com:443 HTTP/1.1"
2019/08/11 13:26:14 [warn] 6663#0: *26 using uninitialized "month" variable while logging request, client: 164.132.153.130, server: , request: "CONNECT i.instagram.com:443 HTTP/1.1"
2019/08/11 13:26:14 [warn] 6663#0: *26 using uninitialized "day" variable while logging request, client: 164.132.153.130, server: , request: "CONNECT i.instagram.com:443 HTTP/1.1"
2019/08/11 13:26:14 [warn] 6663#0: *26 using uninitialized "hour" variable while logging request, client: 164.132.153.130, server: , request: "CONNECT i.instagram.com:443 HTTP/1.1"
2019/08/11 14:30:49 [warn] 6663#0: *33 using uninitialized "year" variable while logging request, client: 110.249.212.46, server: , request: "GET http://110.249.212.46/testget?q=23333&port=80 HTTP/1.1"
2019/08/11 14:30:49 [warn] 6663#0: *33 using uninitialized "month" variable while logging request, client: 110.249.212.46, server: , request: "GET http://110.249.212.46/testget?q=23333&port=80 HTTP/1.1"
2019/08/11 14:30:49 [warn] 6663#0: *33 using uninitialized "day" variable while logging request, client: 110.249.212.46, server: , request: "GET http://110.249.212.46/testget?q=23333&port=80 HTTP/1.1"
2019/08/11 14:30:49 [warn] 6663#0: *33 using uninitialized "hour" variable while logging request, client: 110.249.212.46, server: , request: "GET http://110.249.212.46/testget?q=23333&port=80 HTTP/1.1"
2019/08/11 14:30:50 [warn] 6663#0: *32 using uninitialized "year" variable while logging request, client: 110.249.212.46, server: , request: "GET http://110.249.212.46/testget?q=23333&port=80 HTTP/1.1"
2019/08/11 14:30:50 [warn] 6663#0: *32 using uninitialized "month" variable while logging request, client: 110.249.212.46, server: , request: "GET http://110.249.212.46/testget?q=23333&port=80 HTTP/1.1"
2019/08/11 14:30:50 [warn] 6663#0: *32 using uninitialized "day" variable while logging request, client: 110.249.212.46, server: , request: "GET http://110.249.212.46/testget?q=23333&port=80 HTTP/1.1"
2019/08/11 14:30:50 [warn] 6663#0: *32 using uninitialized "hour" variable while logging request, client: 110.249.212.46, server: , request: "GET http://110.249.212.46/testget?q=23333&port=80 HTTP/1.1"
2019/08/11 14:30:58 [warn] 6663#0: *34 using uninitialized "year" variable while logging request, client: 110.249.212.46, server: , request: "GET http://110.249.212.46/testget?q=23333&port=80 HTTP/1.1"
2019/08/11 14:30:58 [warn] 6663#0: *34 using uninitialized "month" variable while logging request, client: 110.249.212.46, server: , request: "GET http://110.249.212.46/testget?q=23333&port=80 HTTP/1.1"
2019/08/11 14:30:58 [warn] 6663#0: *34 using uninitialized "day" variable while logging request, client: 110.249.212.46, server: , request: "GET http://110.249.212.46/testget?q=23333&port=80 HTTP/1.1"
2019/08/11 14:30:58 [warn] 6663#0: *34 using uninitialized "hour" variable while logging request, client: 110.249.212.46, server: , request: "GET http://110.249.212.46/testget?q=23333&port=80 HTTP/1.1"
2019/08/11 14:31:06 [warn] 6663#0: *35 using uninitialized "year" variable while logging request, client: 110.249.212.46, server: , request: "GET http://110.249.212.46/testget?q=23333&port=80 HTTP/1.1"
2019/08/11 14:31:06 [warn] 6663#0: *35 using uninitialized "month" variable while logging request, client: 110.249.212.46, server: , request: "GET http://110.249.212.46/testget?q=23333&port=80 HTTP/1.1"
2019/08/11 14:31:06 [warn] 6663#0: *35 using uninitialized "day" variable while logging request, client: 110.249.212.46, server: , request: "GET http://110.249.212.46/testget?q=23333&port=80 HTTP/1.1"
2019/08/11 14:31:06 [warn] 6663#0: *35 using uninitialized "hour" variable while logging request, client: 110.249.212.46, server: , request: "GET http://110.249.212.46/testget?q=23333&port=80 HTTP/1.1"
2019/08/11 14:33:45 [warn] 6663#0: *36 using uninitialized "year" variable while logging request, client: 66.240.205.34, server: , request: "145.ll|'|'|SGFjS2VkX0Q0OTkwNjI3|'|'|WIN-JNAPIER0859|'|'|JNapier|'|'|19-02-01|'|'||'|'|Win 7 Professional SP1 x64|'|'|No|'|'|0.7d|'|'|..|'|'|AA==|'|'|112.inf|'|'|SGFjS2VkDQoxOTIuMTY4LjkyLjIyMjo1NTUyDQpEZXNrdG9wDQpjbGllbnRhLmV4ZQ0KRmFsc2UNCkZhbHNlDQpUcnVlDQpGYWxzZQ==12.act|'|'|AA=="
2019/08/11 14:33:45 [warn] 6663#0: *36 using uninitialized "month" variable while logging request, client: 66.240.205.34, server: , request: "145.ll|'|'|SGFjS2VkX0Q0OTkwNjI3|'|'|WIN-JNAPIER0859|'|'|JNapier|'|'|19-02-01|'|'||'|'|Win 7 Professional SP1 x64|'|'|No|'|'|0.7d|'|'|..|'|'|AA==|'|'|112.inf|'|'|SGFjS2VkDQoxOTIuMTY4LjkyLjIyMjo1NTUyDQpEZXNrdG9wDQpjbGllbnRhLmV4ZQ0KRmFsc2UNCkZhbHNlDQpUcnVlDQpGYWxzZQ==12.act|'|'|AA=="
2019/08/11 14:33:45 [warn] 6663#0: *36 using uninitialized "day" variable while logging request, client: 66.240.205.34, server: , request: "145.ll|'|'|SGFjS2VkX0Q0OTkwNjI3|'|'|WIN-JNAPIER0859|'|'|JNapier|'|'|19-02-01|'|'||'|'|Win 7 Professional SP1 x64|'|'|No|'|'|0.7d|'|'|..|'|'|AA==|'|'|112.inf|'|'|SGFjS2VkDQoxOTIuMTY4LjkyLjIyMjo1NTUyDQpEZXNrdG9wDQpjbGllbnRhLmV4ZQ0KRmFsc2UNCkZhbHNlDQpUcnVlDQpGYWxzZQ==12.act|'|'|AA=="
2019/08/11 14:33:45 [warn] 6663#0: *36 using uninitialized "hour" variable while logging request, client: 66.240.205.34, server: , request: "145.ll|'|'|SGFjS2VkX0Q0OTkwNjI3|'|'|WIN-JNAPIER0859|'|'|JNapier|'|'|19-02-01|'|'||'|'|Win 7 Professional SP1 x64|'|'|No|'|'|0.7d|'|'|..|'|'|AA==|'|'|112.inf|'|'|SGFjS2VkDQoxOTIuMTY4LjkyLjIyMjo1NTUyDQpEZXNrdG9wDQpjbGllbnRhLmV4ZQ0KRmFsc2UNCkZhbHNlDQpUcnVlDQpGYWxzZQ==12.act|'|'|AA=="
2019/08/11 16:48:57 [error] 1293#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 35.21.86.49, server: , request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:5000/", host: "trackmywaterchange.us-east-2.elasticbeanstalk.com"
2019/08/11 16:48:57 [error] 1293#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 35.21.86.49, server: , request: "GET /favicon.ico HTTP/1.1", upstream: "http://127.0.0.1:5000/favicon.ico", host: "trackmywaterchange.us-east-2.elasticbeanstalk.com", referrer: "http://trackmywaterchange.us-east-2.elasticbeanstalk.com/"
/etc/nginx/nginx.conf
:
user nginx;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
worker_processes auto;
worker_rlimit_nofile 32793;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
include conf.d/*.conf;
map $http_upgrade $connection_upgrade {
default "upgrade";
}
server {
listen 80 default_server;
access_log /var/log/nginx/access.log main;
client_header_timeout 60;
client_body_timeout 60;
keepalive_timeout 60;
gzip off;
gzip_comp_level 4;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
# Include the Elastic Beanstalk generated locations
include conf.d/elasticbeanstalk/*.conf;
}
}
似乎您的 pom 中缺少以下依賴項,您能否更新完整的 pom 有問題?
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
這最終導致數據庫連接失敗。
如果您在日志中注意到,有這一行:
03:10:13.291 [main] INFO o.h.h.i.QueryTranslatorFactoryInitiator - HHH000397: Using ASTQueryTranslatorFactory
事實證明,這一步后啟動失敗。 不幸的是,沒有一個很好的錯誤信息描述出了什么問題,但經過大量測試,我發現這是由於連接數據庫失敗造成的。
以下是我采取的基本故障排除步驟。
本地驗證:
這應該不用說,但關閉您的本地數據庫並嘗試啟動您的應用程序。 如果失敗,那么您就有問題了,否則這不是您的根本原因。
驗證所有拼寫:
同樣,這不言而喻,但在弄清楚問題后,請檢查您的拼寫。 例如,我在 application.properties jdbc:mysql://${MSYQL_HOST:test_host}:${MYSQL_PORT:3306}/${MYSQL_DB:test_db}
中使用它作為我的數據源 URL。 如果你仔細看,你會發現我的MYSQL_HOST
環境變量拼寫錯誤。
SSH 並檢查您的連接
在通過 ssh 進入您的環境后嘗試連接到您的數據庫。 執行yum install MySQL
,使用以下命令: MySQL -h 'rds-endpoint-url' -P 'rds-DB-port' -u 'db-username' -p
。 輸入連接密碼后,您應該輸入MySQL
提示。 如果不是,請檢查您的 RDS 實例是否與您的 ec2 或 elb 實例在同一 VPC 中,並允許您的 ec2 或 elb 實例具有的安全組。
畢竟,這些一般步驟有望解決您的問題。
為給定的域后端更新Nginx配置中的上游和代理傳遞,如下所示,其中
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
include conf.d/*.conf;
map $http_upgrade $connection_upgrade {
default "upgrade";
}
upstream backend {
server localhost:5000;
}
server {
listen 80 default_server;
access_log /var/log/nginx/access.log main;
client_header_timeout 60;
client_body_timeout 60;
keepalive_timeout 60;
gzip off;
gzip_comp_level 4;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
location /app1 {
proxy_pass http://backend;
}
# Include the Elastic Beanstalk generated locations
include conf.d/elasticbeanstalk/*.conf;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.