无法通过AWS CloudFront访问EC2上Express服务的HTTPS连接
解决CloudFront HTTPS访问EC2 API出现502 Bad Gateway的问题
核心结论:不需要让Express监听443端口
你的架构是CloudFront作为HTTPS入口,转发请求到EC2的HTTP服务(80端口),问题出在CloudFront与EC2的协议转发配置上,而非EC2服务本身的端口监听。
具体排查与修复步骤:
修正CloudFront源的协议策略
进入CloudFront控制台,找到你的分发的「源」配置,将Origin Protocol Policy设置为HTTP only。
原因:如果当前设置为Match Viewer或HTTPS only,当用户发起HTTPS请求时,CloudFront会尝试用HTTPS连接EC2的443端口,但你的EC2服务只监听80,导致连接失败,返回502。验证CloudFront行为的协议配置
在「行为」设置中,确保Viewer Protocol Policy可设为Redirect HTTP to HTTPS(强制用户用HTTPS访问),同时Allowed HTTP Methods包含你API需要的方法(如GET、POST等)。确认CloudFront到EC2的连通性
- 在EC2实例上执行
tcpdump port 80抓包,然后发起HTTPS请求,查看是否有CloudFront的IP向80端口发起请求。 - 如果没有请求到达,检查CloudFront的源是否正确配置为EC2的公网IPv4 DNS(确保该DNS能正常解析到EC2的公网IP)。
- 在EC2实例上执行
排查EC2端的网络层问题
虽然你已经开放了安全组,但可以额外确认:- Ubuntu的
ufw防火墙是否真的放行80端口:执行ufw status查看规则。 - EC2的公网IP是否能直接通过HTTP访问(你已经确认可以,这步可快速跳过)。
- Ubuntu的
额外说明
如果后续需要EC2直接提供HTTPS服务,才需要让Express监听443并配置SSL证书,但在当前CloudFront作为CDN的架构下,完全不需要这么做——CloudFront已经帮你处理了客户端的HTTPS加密,它与EC2之间用HTTP通信是安全的(如果担心,可以配置CloudFront与源的HTTPS,但需要EC2部署证书,增加复杂度)。
内容的提问来源于stack exchange,提问作者lllllllllllll
相关产品推荐
相关产品推荐

