启用SSL的AWS ALB下Angular与SpringBoot通信故障求助
问题解决:AWS EKS中Angular(HTTPS)调用SpringBoot(HTTP)失败的配置缺失项
核心原因
浏览器的混合内容安全策略会阻止HTTPS页面发起HTTP请求,这是浏览器层面的强制安全限制,和SpringBoot的CORS配置无关——即使CORS配置正确,只要请求是HTTP协议,浏览器就会直接拦截。
必须补充的配置项
1. 切换SpringBoot的调用地址为HTTPS
- 把Angular应用中配置的API请求地址,从原SpringBoot的HTTP地址替换为其HTTPS ALB域名。比如将
http://springboot-service.example.com/api改成https://springboot-https-alb.example.com/api。 - 若地址是硬编码在Angular代码中,需修改后重新构建部署;若用环境变量配置,直接更新环境变量指向HTTPS域名即可。
2. 修正SpringBoot的CORS配置
即使已配置CORS,需适配HTTPS场景调整:
- 将
allowedOrigins设置为Angular的HTTPS域名(比如https://angular-alb.example.com),而非原HTTP地址。 - 若业务需要携带Cookie等凭证,需将
allowCredentials设为true;同时确保allowedMethods包含业务用到的所有HTTP方法(GET/POST/PUT等)。
示例SpringBoot CORS配置代码:
@Configuration public class CorsConfig { @Bean public CorsFilter corsFilter() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); CorsConfiguration config = new CorsConfiguration(); // 替换为你的Angular HTTPS域名 config.addAllowedOrigin("https://angular-alb.example.com"); config.addAllowedMethod("*"); config.addAllowedHeader("*"); config.setAllowCredentials(true); source.registerCorsConfiguration("/**", config); return new CorsFilter(source); } }
3. 验证ALB与Ingress配置
- 确认SpringBoot的ALB已正确配置HTTPS监听器,关联AWS ACM证书,且监听器将HTTPS流量转发到Pod的HTTP端口(由ALB完成SSL终止)。
- 若使用Ingress,检查Ingress规则是否正确映射HTTPS路径到后端Service,且Ingress已关联正确的ACM证书。
4. 安全组与网络策略检查
- 确保SpringBoot的ALB安全组允许来自客户端或Angular ALB的443端口流量。
- 若EKS配置了NetworkPolicy,需允许Angular客户端(或其ALB)与SpringBoot Service/端口的通信。
内容的提问来源于stack exchange,提问作者Dnyaneshwar Jadhav
相关产品推荐
相关产品推荐

