我尝试使用 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
),并验证我的应用程序在本地主机上的该端口上成功运行。
这个问题非常相似,只不过我部署的是 JAR 而不是 WAR。似乎我在配置 Nginx 方面缺少一些东西,而且我不知道如何继续。
这是我的春季申请:
@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!";
}
}
}
Nginx 不知道您的 Spring Boot 应用程序正在哪个端口上运行。 通过在 application.properties 中添加“server.port=5000”或在最后一步中使用其他建议的方式,使应用程序在 Nginx 默认重定向到的端口 5000 上运行:
根据您发送给我的问题描述和安全组设置,您的 EC2 实例的唯一入站端口 80 已通过防火墙向世界开放,并且您的应用程序使用端口 5000。因此,使用我给您的安全规则,它也为您的 EC2 实例打开入站端口 5000,以便您的应用程序开始工作而不会出现上述错误。
如果有人在设置 server.port=5000 后仍然遇到这样的错误。 如果您有数据库连接,您可以执行以下操作:
在仪表板的配置部分,转到 RDS 部分并创建一个远程数据库。记住形成的数据库的用户名、密码。
在软件部分,添加以下属性:
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
读取 eb-engine.log 以及 nginx/error.log 后,默认 nginx 端口为 5000,而 spring-boot 的默认端口为 8080。
我们可以使用 setenv cmd 通过 elastic beanstalk CLI 更新我们的应用程序。
eb setenv SERVER_PORT=5000
我们可以通过 application.properties 在代码中更新它
server.port=5000