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

EC2实例中SpringBoot应用配置HTTPS访问的技术求助

解决Spring Boot应用在EC2上的HTTPS访问问题

首先,从你的描述和netstat输出来看,核心问题有两个:一是你的Spring Boot应用似乎没有对外监听8080端口(netstat里看不到8080的监听记录),二是ELB的流量转发可能没有正确配置到后端的EC2实例。下面一步步帮你排查和解决:

第一步:确保Spring Boot应用能被外部访问

你的netstat结果里没有8080的监听,这说明应用要么没启动,要么只绑定了本地回环地址(127.0.0.1),导致ELB和外部无法访问。

  • 先检查应用是否在运行:执行ps aux | grep java,看看有没有你的Spring Boot进程。如果没有,先启动应用。
  • 如果应用在运行,检查启动参数或配置文件:确认没有设置server.address=127.0.0.1(默认是0.0.0.0,允许所有网卡访问)。如果设置了,改成server.address=0.0.0.0或者删掉这个配置,然后重启应用。
  • 验证本地访问:在EC2实例里执行curl http://localhost:8080/users/rayyanshaji/todos/,确认能返回正确的JSON响应;再用EC2的公网IP测试:curl http://<你的EC2公网IP>:8080/users/rayyanshaji/todos/,如果能访问,说明应用已经对外监听了。

第二步:修正ELB的转发配置

你已经配置了HTTPS 443监听器,但需要确保流量能正确转发到EC2的8080端口:

  • 登录AWS控制台,进入你的负载均衡器页面,找到监听器标签:
    • 点击HTTPS(443)监听器的查看/编辑规则,确认转发规则是指向你的目标组,并且目标组的端口是8080、协议是HTTP(因为ELB已经处理了HTTPS加密,后端EC2只需要处理HTTP流量)。
    • 检查目标组的健康检查:确保健康检查的路径(比如/users/rayyanshaji/todos/或者/actuator/health如果你用了Spring Boot Actuator)能返回200状态码。如果健康检查失败,ELB不会把流量转发到EC2,这是常见的坑。

第三步:确认安全组和网络配置

  • EC2实例的安全组:除了允许80、443入站,还要允许ELB的安全组访问8080端口(生产环境建议只允许ELB的安全组访问,测试阶段可以暂时允许0.0.0.0/0访问8080)。
  • ELB的安全组:要允许互联网的443(HTTPS)和80(HTTP)入站流量,同时允许出站到EC2的8080端口。
  • VPC网络ACL:确保入站规则允许443、80端口,出站规则允许所有响应流量(通常设置为允许所有出站即可)。

第四步:验证域名和证书关联

  • 确认Route53的域名解析记录是指向ELB的DNS名称,而不是EC2的公网IP。因为你的HTTPS证书绑定在ELB上,所有流量必须先经过ELB才能触发HTTPS加密。
  • 检查ACM证书:确保证书状态是“已颁发”,并且覆盖了你使用的域名,同时已经正确关联到ELB的HTTPS监听器。

第五步:测试完整流程

  1. 先确认EC2本地和公网IP能访问8080端口的应用。
  2. 然后用curl https://<你的域名>/users/rayyanshaji/todos/测试HTTPS访问,如果返回正确的JSON,说明配置成功。
  3. 如果还是不行,查看ELB的访问日志或者CloudWatch里的目标组健康状态,排查具体的错误原因(比如健康检查失败、端口转发错误等)。

备选方案:直接在Spring Boot中配置HTTPS(不使用ELB)

如果你不想用ELB,也可以让Spring Boot直接处理HTTPS:

  1. 由于ACM证书无法直接下载,你可以用Let's Encrypt生成免费证书,或者自己创建自签名证书(仅用于测试)。
  2. 在application.properties中添加以下配置:
    server.port=443
    server.ssl.key-store-type=PKCS12
    server.ssl.key-store=classpath:your-cert.p12
    server.ssl.key-store-password=your-password
    server.ssl.key-alias=your-alias
    
  3. 将证书文件放到Spring Boot的src/main/resources目录下,重启应用,确保netstat -tulpn能看到0.0.0.0:443的监听。
  4. 安全组允许443入站流量即可。不过这种方法需要自己维护证书更新,在AWS环境下更推荐用ELB+ACM的方案,省心又安全。

内容的提问来源于stack exchange,提问作者Rayyan Shaji

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:37:29