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

无法通过AWS CloudFront访问EC2上Express服务的HTTPS连接

解决CloudFront HTTPS访问EC2 API出现502 Bad Gateway的问题

核心结论:不需要让Express监听443端口

你的架构是CloudFront作为HTTPS入口,转发请求到EC2的HTTP服务(80端口),问题出在CloudFront与EC2的协议转发配置上,而非EC2服务本身的端口监听。

具体排查与修复步骤:

  1. 修正CloudFront源的协议策略
    进入CloudFront控制台,找到你的分发的「源」配置,将Origin Protocol Policy设置为HTTP only。
    原因:如果当前设置为Match Viewer或HTTPS only,当用户发起HTTPS请求时,CloudFront会尝试用HTTPS连接EC2的443端口,但你的EC2服务只监听80,导致连接失败,返回502。

  2. 验证CloudFront行为的协议配置
    在「行为」设置中,确保Viewer Protocol Policy可设为Redirect HTTP to HTTPS(强制用户用HTTPS访问),同时Allowed HTTP Methods包含你API需要的方法(如GET、POST等)。

  3. 确认CloudFront到EC2的连通性

    • 在EC2实例上执行tcpdump port 80抓包,然后发起HTTPS请求,查看是否有CloudFront的IP向80端口发起请求。
    • 如果没有请求到达,检查CloudFront的源是否正确配置为EC2的公网IPv4 DNS(确保该DNS能正常解析到EC2的公网IP)。
  4. 排查EC2端的网络层问题
    虽然你已经开放了安全组,但可以额外确认:

    • Ubuntu的ufw防火墙是否真的放行80端口:执行ufw status查看规则。
    • EC2的公网IP是否能直接通过HTTP访问(你已经确认可以,这步可快速跳过)。

额外说明

如果后续需要EC2直接提供HTTPS服务,才需要让Express监听443并配置SSL证书,但在当前CloudFront作为CDN的架构下,完全不需要这么做——CloudFront已经帮你处理了客户端的HTTPS加密,它与EC2之间用HTTP通信是安全的(如果担心,可以配置CloudFront与源的HTTPS,但需要EC2部署证书,增加复杂度)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 02:42:49