You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot部署Elastic Beanstalk根路径接口失效及健康检查异常问题

问题解答

1. 为什么Elastic Beanstalk控制台无法修改健康检查路径?

Elastic Beanstalk的配置优先级遵循 .ebextensions 配置文件 > 控制台手动配置的规则,如果你之前的部署包中包含了定义健康检查路径的 .ebextensions 配置,每次配置变更或重新部署后,控制台手动修改的内容都会被覆盖回配置文件中的设定。
另外如果你使用的是Amazon Linux 2 版本的Docker平台,负载均衡健康检查路径需要同时在「负载均衡」配置栏和「应用程序」配置栏的健康检查部分同步修改,仅修改其中一处会被系统自动回滚到默认值/。

2. 为什么根路径/接口本地运行正常,部署到Elastic Beanstalk后失效?

原因主要出在端口映射和反向代理规则上:

  • 从你提供的Nginx日志可以看到,Elastic Beanstalk默认的反向代理规则会把请求转发到上游的8080端口,但你的Spring Boot应用实际运行在5000端口,Dockerfile仅声明暴露5000端口并未修改EB的默认转发规则,导致部分请求转发失败。
  • 你其他接口可正常访问,大概率是请求匹配到了Nginx的其他路径转发规则,只有根路径/的请求走了默认的8080转发规则,无法命中你的应用接口。
  • 另外如果你的Spring Boot配置了server.servlet.context-path全局路径前缀,或者Spring Security拦截了根路径请求,也会出现本地正常部署后404的问题。

解决办法

  • 首先通过 .ebextensions 配置文件固定健康检查配置和端口映射,避免控制台修改被回退,在项目根目录新建.ebextensions/alb.config文件,写入以下内容:
option_settings:
  # 指定负载均衡健康检查路径
  aws:elbv2:targetgroup:
    HealthCheckPath: /actuator/health
    HealthCheckIntervalSeconds: 30
  # 指定容器端口为应用实际运行的5000
  aws:autoscaling:launchconfiguration:
    ContainerPort: 5000
  • 如果你不想修改配置文件,也可以直接把Spring Boot应用的运行端口改为8080,和EB默认的转发端口对齐,同时检查是否有全局路径前缀配置,确保/actuator/health路径可以直接访问。
  • 如果需要保留根路径接口,检查对应Controller的注解配置,确保没有父级@RequestMapping路径覆盖,也没有拦截器拦截根路径请求。

内容的提问来源于stack exchange,提问作者mcool

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:15:04