You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 07:09:34