AWS环境下Angular前端与Spring Boot后端SSL连接问题求助
问题排查步骤
一、解决“内容必须通过HTTPS提供”拦截问题(ALB转发HTTP到EC2场景)
这个错误是浏览器混合内容拦截机制导致的:前端通过HTTPS加载,但Angular代码仍在调用HTTP协议的后端接口,浏览器会直接阻止这类请求。
- 检查Angular环境配置文件(如
environment.prod.ts),确认API接口基础地址apiUrl为HTTPS协议,例如https://your-alb-domain.com/api,而非http://... - 给Spring Boot后端配置
X-Forwarded-Proto相关参数,让后端识别原始请求为HTTPS(因为ALB转发的是HTTP),避免后端返回HTTP格式的重定向或资源地址。在application.properties中添加:server.forward-headers-strategy=framework server.tomcat.remote-ip-header=x-forwarded-for server.tomcat.protocol-header=x-forwarded-proto - 调整CloudFront行为设置:将“查看器协议策略”设为“重定向HTTP到HTTPS”,强制所有前端请求走HTTPS,避免触发混合内容拦截。
二、解决ALB转发HTTPS到EC2时的403 Forbidden问题
- 安全组配置检查:
- ALB安全组:允许入站443端口(可限制为前端域名IP或全部),出站允许443端口访问EC2安全组
- EC2安全组:仅允许来自ALB安全组ID的入站443端口请求,不要开放到全部IP
- 目标组健康检查验证:
- 查看ALB目标组健康状态,若EC2实例显示“不健康”,ALB会拒绝转发请求并返回403。确认健康检查路径正确(如
/actuator/health,需Spring Boot开启actuator),端口设为443,协议为HTTPS
- 查看ALB目标组健康状态,若EC2实例显示“不健康”,ALB会拒绝转发请求并返回403。确认健康检查路径正确(如
- Spring Boot SSL配置检查:
- 注意:AWS ACM公网证书无法直接导出到EC2,若要ALB转发HTTPS到EC2,需使用ACM私有CA证书或自行生成证书。在
application.properties中配置:server.port=443 server.ssl.key-store-type=PKCS12 server.ssl.key-store=/path/to/your-cert.p12 server.ssl.key-store-password=your-password server.ssl.key-alias=your-alias - 若不想在EC2上配置SSL,建议回到第一种场景(ALB终止SSL,转发HTTP到EC2),这是更常见的AWS部署方式
- 注意:AWS ACM公网证书无法直接导出到EC2,若要ALB转发HTTPS到EC2,需使用ACM私有CA证书或自行生成证书。在
- CORS配置检查:
- Spring Boot的CORS配置需允许前端的HTTPS域名(如
https://your-cloudfront-domain.com),避免仅放行HTTP域名导致HTTPS请求被拒。示例配置:@Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/api/**") .allowedOrigins("https://your-cloudfront-domain.com") .allowedMethods("GET", "POST", "PUT", "DELETE") .allowedHeaders("*") .allowCredentials(true); } }
- Spring Boot的CORS配置需允许前端的HTTPS域名(如
- ALB证书关联检查:确认ALB的HTTPS监听器已正确关联AWS ACM证书,证书覆盖域名包含ALB的访问域名。
三、通用排查点
- 打开浏览器开发者工具“网络”标签,查看被拦截/返回403请求的详细信息:请求URL、请求头(尤其是
Origin、X-Forwarded-Proto)、响应头,这些信息能快速定位问题 - 检查EC2系统日志和Spring Boot应用日志,确认请求是否到达后端、是否有报错信息
- 清除CloudFront缓存:若之前HTTP请求被缓存,可能导致混合内容问题,手动清除缓存后再测试
内容的提问来源于stack exchange,提问作者user20922811
相关产品推荐
相关产品推荐

