求助:Cloudflare无法HTTPS访问EC2上的React应用,IPv4访问正常
Cloudflare SSL/TLS模式不匹配
要是你EC2上已经配置了有效的SSL证书(比如Let's Encrypt),得确保Cloudflare的SSL/TLS模式设置为「完全」或「严格」。如果当前是「灵活」模式,Cloudflare会以HTTP方式向EC2发起请求,但你的EC2现在只监听HTTPS,必然会连接失败;反之,如果EC2用的是自签名证书,「严格」模式会因为证书不被信任而拒绝连接,此时可以先切换到「完全」模式测试。EC2安全组未放行Cloudflare代理IP段
直接用IPv4能访问HTTPS,说明EC2的443端口对你的本地IP是开放的,但Cloudflare是反向代理,请求实际来自Cloudflare的IP池。如果EC2安全组的443端口只允许了你的IP访问,没添加Cloudflare的全部代理IP段,就会导致域名访问被拦截。需要把Cloudflare公布的所有IPv4/IPv6段添加到EC2安全组的443入站规则里。Cloudflare缓存或DNS未生效
修改HTTPS配置后,Cloudflare可能缓存了旧的HTTP响应或DNS记录。可以手动在Cloudflare控制台的「缓存」页面点击「清除全部缓存」,同时检查DNS记录的TTL值,要是TTL设得太长,可能得等一会儿让全球节点同步,或者手动刷新本地DNS缓存。SSL证书域名覆盖问题
检查EC2上安装的SSL证书,确认证书里包含你用来访问的Cloudflare域名(比如example.com或*.example.com)。如果证书仅针对EC2的IPv4地址或其他无关域名,浏览器访问域名时会出现证书不匹配错误,导致页面加载失败,但直接访问IPv4时证书是匹配的,所以能正常打开。React应用存在硬编码HTTP资源引用
看看create-react-app构建后的代码,有没有硬编码的HTTP资源地址(比如API请求、静态资源链接)。当页面以HTTPS加载时,浏览器会阻止混合内容(HTTP资源在HTTPS页面中加载),导致页面无法正常渲染。可以打开浏览器开发者工具的「控制台」查看是否有混合内容报错,解决办法是把所有资源引用改成相对路径或HTTPS地址。Cloudflare规则冲突
检查Cloudflare的「页面规则」或「重定向规则」,有没有强制HTTP跳转的规则,或者其他会干扰HTTPS请求的配置。比如之前设置过http://*example.com/*跳转到HTTP地址,现在得更新成HTTPS相关的规则。
内容的提问来源于stack exchange,提问作者qjk

