Spring Boot项目部署到Elastic Beanstalk返回404错误,本地运行正常
Elastic Beanstalk WAR包部署后/home路径返回404问题排查方案
常见原因
- 上下文路径配置不匹配:本地运行时WAR包作为根应用部署,默认上下文路径为
/,但Elastic Beanstalk默认会使用WAR包文件名作为上下文路径,导致实际可访问路径为/{war包名}/home,而非/home - 文件名大小写不匹配:Elastic Beanstalk底层运行环境为Linux,对文件路径大小写敏感,若视图文件名为
Index.jsp但代码中映射为index.jsp,本地Windows/macOS环境不区分大小写可正常运行,部署到Linux后就会找不到文件 - 视图解析路径配置错误:Controller映射的视图路径和WAR包内实际文件路径不一致,或打包时遗漏了JSP文件
- Tomcat版本兼容性问题:若本地使用Tomcat 8/9,Elastic Beanstalk环境使用Tomcat 10+,会存在
javax.servlet到jakarta.servlet的包名变更,导致JSP文件无法正常解析 - 文件权限不足:Elastic Beanstalk中Tomcat运行用户没有JSP文件的读取权限,导致系统判定文件不存在
可落地解决方案
- 修正上下文路径配置:将待上传的WAR包重命名为
ROOT.war,或进入Elastic Beanstalk环境配置页->「软件」->「容器选项」,将上下文路径参数设置为/,确保应用部署在根路径 - 校验文件路径与大小写:本地解压WAR包,确认
index.jsp的实际存放路径、文件名大小写与代码中Controller映射的路径完全一致,确保打包时没有遗漏视图文件 - 统一Tomcat版本:将Elastic Beanstalk的Tomcat版本调整为和本地运行一致的版本,避免javax/jakarta包名不兼容问题
- 修复文件权限:在项目根目录添加
.ebextensions配置文件夹,新建权限修复配置,自动在部署完成后修正项目文件权限,示例配置如下:
files: "/opt/elasticbeanstalk/hooks/appdeploy/post/99_fix_jsp_permission.sh": mode: "000755" owner: root group: root content: | #!/bin/bash chown -R tomcat:tomcat /usr/share/tomcat/webapps/ROOT/ chmod -R 755 /usr/share/tomcat/webapps/ROOT/
注意将配置中的Tomcat路径替换为你环境中对应版本的实际路径。
内容的提问来源于stack exchange,提问作者Cole Newman
相关产品推荐
相关产品推荐

