EC2上Spring Boot服务公网IPv4端点启用HTTPS及跨域请求问题咨询
EC2上Spring Boot服务公网IPv4端点启用HTTPS及跨域请求问题咨询
兄弟,我来帮你捋捋这个问题——其实你现在的架构方向是对的,但核心误区在于搞混了ALB(负载均衡器)和EC2实例各自的角色,还有前端该请求的正确地址。
先给你拆解清楚:
- 你用Route53+ACM+ALB搭出来的HTTPS域名,本质是让ALB成为对外的HTTPS入口,所有前端请求应该走这个域名,而不是直接打EC2的公网IP端点。因为EC2本身根本没配置有效的SSL证书(你在ACM申请的证书是绑定域名的,和EC2的公网IP没关系),浏览器直接访问EC2的HTTPS端点会因为证书不匹配直接拦截请求,这就是你现在遇到的问题。
接下来给你一步步说怎么调整:
1. 修正前端请求地址
把前端里调用后端的地址,从EC2的公网IP(比如https://1.2.3.4/api/xxx)改成你绑定到ALB的域名(比如https://your-domain.com/api/xxx)。这才是正确的访问路径——ALB会帮你处理HTTPS加密,然后把请求转发到目标组里的EC2实例。
2. 检查ALB和EC2的关键配置
- ALB监听器配置:确认443端口的HTTPS监听器已经正确绑定你在ACM申请的证书,转发规则是把请求转到EC2目标组的HTTP端口(比如Spring Boot默认的8080)。
- Route53记录:确保你的域名解析记录是指向ALB的DNS名称,而不是EC2的公网IP。
- EC2安全组:不要直接开放EC2的8080(或你的后端端口)给公网,只需要允许来自ALB安全组的入站流量即可,这样更安全。
3. 解决跨域问题
因为你的前端在GitHub Pages(属于第三方域名),后端必须配置CORS(跨域资源共享)才能让浏览器允许请求。在Spring Boot里可以这么做:
- 全局配置:写一个CORS过滤器,允许Origin为你的GitHub Pages地址(比如
https://your-username.github.io),允许GET/POST等常用请求方法,允许携带自定义Headers。 - 局部配置:在Controller或方法上加上
@CrossOrigin(origins = "https://your-username.github.io")注解。
关于“直接给EC2端点开HTTPS”的补充
如果你确实非要让EC2本身支持HTTPS(非常不推荐,不如ALB灵活安全),那你得这么做:
- 给EC2的公网IP绑定一个子域名(比如
ec2.your-domain.com),然后给这个子域名申请ACM证书。 - 在Spring Boot的配置文件里配置Tomcat的SSL,指定证书的keystore路径、密码等(注意要把证书传到EC2实例上)。
但这种做法维护成本高,而且不如ALB能自动管理证书、做负载均衡,所以真心不建议。
按照上面的步骤调整后,前端从GitHub Pages发HTTPS请求到后端应该就能正常工作了。
备注:内容来源于stack exchange,提问作者Mykhailo Kuryk
相关产品推荐
相关产品推荐

