部署Spring Boot WAR包至Azure后遇CGI错误,请求协助排查
解决Spring Boot WAR部署Azure后出现CGI错误的排查方案
检查Java版本与容器配置
登录Azure门户进入目标App Service,在「配置」>「常规设置」里:- 确认Java版本和项目使用的完全匹配(比如项目用Java 11,就别选Java 8)
- 选择对应版本的Tomcat作为Web容器,Spring Boot WAR包依赖Tomcat运行,别选错成Java SE模式(除非你用的是内嵌容器的可执行WAR)
验证WAR包的有效性
- 本地先把WAR包部署到Tomcat里测试,确认启动无异常,排除项目本身的问题
- 检查pom.xml配置:确保
<packaging>war</packaging>已设置,若用外部Tomcat,需排除内嵌Tomcat依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> - 确认WAR包大小未超出Azure App Service的部署限制(通常是1GB)
查看详细错误日志
这个CGI错误只是表层提示,真正的问题藏在日志里:- 进入App Service的「日志」>「应用日志」,开启文件系统日志
- 用
az webapp log tail --name <你的应用名> --resource-group <资源组名>命令实时查看启动日志,找到具体的异常堆栈(比如依赖缺失、配置错误、数据库连接失败)
确认部署路径与启动命令
- Tomcat部署的WAR包要放在
site/wwwroot/webapps目录下,如果你是手动上传或用CI/CD部署,别传到根目录(根目录会被服务器当成CGI程序处理) - 不要设置错误的自定义启动命令,Spring Boot WAR包在Azure Tomcat环境下不需要额外启动命令,默认会自动部署
- Tomcat部署的WAR包要放在
检查环境变量与端口配置
- 在App Service的「配置」>「应用程序设置」里,确认所有必要的环境变量(比如数据库连接字符串、Spring profile)都已正确设置
- Spring Boot的端口配置要写成
server.port=${PORT:8080},Azure会动态分配端口,硬编码端口会导致启动失败
内容的提问来源于stack exchange,提问作者Mahesh Kumar
相关产品推荐
相关产品推荐

