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

CloudFront+Ubuntu EC2自定义端口HTTP正常但HTTPS报504错误排查求助

CloudFront+Ubuntu EC2自定义端口HTTP正常但HTTPS报504错误排查求助

我最近在做CloudFront转发到Ubuntu EC2的部署,域名用Route 53管理,SSL证书用的ACM,结果遇到个奇怪的问题:用HTTP访问域名完全正常,但HTTPS访问直接报504错误,提示「The request could not be satisfied.」

相关配置和环境信息如下:

  • 我的EC2实例跑的是Ubuntu系统,用Python+Flask+Waitress在5000端口提供API服务
  • EC2安全组已经开放了所有IPv4/IPv6的出入站流量,Ubuntu本地防火墙也已关闭,直接通过http://[EC2公网IP]:5000访问完全正常
  • CloudFront的行为配置:路径为/*,查看器协议策略设为「HTTP和HTTPS」,允许所有HTTP方法,缓存策略为CachingDisabled,源请求策略为AllViewerExceptHostHeader

我原本以为CloudFront会自动把HTTPS流量路由到EC2的5000端口,但现在明显没生效,有没有大佬能帮忙分析下为啥HTTP正常,HTTPS就卡504啊?


针对你的问题,我整理了几个高优先级的排查方向(都是我踩过的坑):

  • 检查CloudFront源的「源协议策略」配置
    这是最可能的原因!你的EC2上Waitress只在5000端口跑HTTP服务,但CloudFront默认会用HTTPS协议回源。如果你的源协议策略设成了「查看器协议匹配」或者「仅HTTPS」,CloudFront会尝试用HTTPS去连EC2的5000端口,而你的服务根本没在这个端口监听HTTPS,自然连不上报504。去CloudFront源配置里把它改成「仅HTTP」试试,这样不管用户发的是HTTP还是HTTPS请求,CloudFront都会用HTTP回源到你的5000端口。

  • 确认CloudFront源的自定义端口设置
    检查你的CloudFront源配置,是不是明确指定了源端口为5000?有时候如果源用的是域名而非IP,可能会默认走80/443端口,这时候就会和你的5000端口不匹配,导致请求失败。

  • 验证EC2的NACL(网络访问控制列表)规则
    虽然你说安全组已经开放了所有流量,但NACL是状态无关的,要确保入站规则允许CloudFront的IP段访问5000端口,出站规则允许返回流量。你可以在AWS控制台找到CloudFront的官方IP段,然后在NACL里添加入站允许规则。

  • 查看CloudFront访问日志定位具体原因
    开启CloudFront的访问日志(存储到S3),看下HTTPS请求的详细错误信息,比如是不是「504 Origin Error」或者源连接超时的提示,这能帮你精准定位是连不上源,还是源响应超时。

  • 本地测试回源连通性
    你在本地用curl -v https://[EC2公网IP]:5000试一下,肯定会报错,这也能验证你的EC2 5000端口确实没提供HTTPS服务,进一步坐实源协议策略的问题。

备注:内容来源于stack exchange,提问作者Vaibhav Garg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 15:55:31