如何通过HTTPS而非HTTP调用AWS EC2实例上的Spring Boot端点?
解决HTTPS Angular客户端调用EC2 Spring Boot接口的混合内容错误
以下是两种无需付费负载均衡器的方案,适合AWS新手:
方案一:直接给Spring Boot应用配置HTTPS
这种方案让Spring Boot直接处理HTTPS请求,无需额外中间件。
步骤1:获取免费SSL证书
使用Let's Encrypt提供的免费证书:
- 在EC2实例(假设为Linux系统)上安装Certbot:
sudo apt update sudo apt install certbot - 生成证书(需提前将你的域名解析到EC2公网IP,建议绑定弹性IP避免IP变动):
证书会生成在sudo certbot certonly --standalone -d your-domain.com/etc/letsencrypt/live/your-domain.com/目录下,包含fullchain.pem和privkey.pem两个文件。
步骤2:配置Spring Boot应用
修改application.properties(或application.yml)添加SSL配置:
server.port=443 server.ssl.enabled=true server.ssl.key-store-type=PKCS12 server.ssl.key-store=/etc/letsencrypt/live/your-domain.com/keystore.p12 server.ssl.key-store-password=自定义密码 server.ssl.key-alias=自定义别名
先将PEM证书转换成PKCS12格式:
sudo openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out keystore.p12 -name 自定义别名
执行时设置的密码需与配置文件中的key-store-password一致。
步骤3:开放EC2安全组端口
在AWS控制台的EC2安全组中,添加入站规则:允许HTTPS(443端口)流量从任意IP(或你的Angular域名IP范围)访问。
方案二:用Nginx反向代理处理HTTPS
如果不想修改Spring Boot的SSL配置,可借助Nginx作为反向代理,由Nginx处理HTTPS请求并转发到Spring Boot的HTTP端口(8080)。
步骤1:安装Nginx并获取SSL证书
- 安装Nginx:
sudo apt update sudo apt install nginx - 用Certbot生成证书(同方案一,确保域名解析到EC2 IP):
Certbot会自动配置Nginx的基础SSL规则。sudo certbot --nginx -d your-domain.com
步骤2:配置Nginx反向代理
编辑Nginx站点配置文件(通常在/etc/nginx/sites-available/your-domain.com),添加反向代理规则:
server { listen 443 ssl; server_name your-domain.com; # Certbot自动生成的SSL配置 ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # 反向代理到Spring Boot的HTTP端口 location /myApiPath { proxy_pass http://localhost:8080/myApiPath; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
重启Nginx使配置生效:
sudo systemctl restart nginx
步骤3:开放安全组端口
在EC2安全组中开放443端口,同时修改8080端口的入站规则,仅允许本地IP(127.0.0.1)访问,避免直接暴露HTTP端口。
额外注意事项
- 若没有自有域名,可使用EC2公网DNS,但Let's Encrypt无法为其颁发证书,此时可生成自签名证书用于测试,但生产环境不推荐(浏览器会提示不安全)。
- 给EC2实例绑定弹性IP,避免实例重启后公网IP变动导致域名解析失效(弹性IP在实例运行时免费)。
- 测试时,Angular客户端调用地址需改为
https://your-domain.com/myApiPath,替换原HTTP地址。
内容的提问来源于stack exchange,提问作者talios
相关产品推荐
相关产品推荐

