一次 CloudFlare 配置阿里云 ALB 源站返回 504 超时的排查记录(用户当地运营商封锁IP)
目录
1. 起因
有孟加拉的用户反馈,无法正常登录APP,会提示网络相关的错误提示,开启VPN能够正常使用。
APP使用的网络组件是okhttp,界面错误信息如下:
|
|
2. 现有架构
域名在Cloud Flare进行解析,解析的CNAME为阿里云的ALB地址,具体的服务在阿里云服务器上。
3. 排查步骤
- 与移动端确认错误信息原因,172.66.xxx.xxx (port 443)表示Cloud Flare边缘服务器的IP,有显示表明域名解析成功。192.168.0.101 (port 38784)表示用户IP,配合用户提供的截图是用户有连Wi-Fi。
- 尝试让用户不连Wi-Fi,用手机移动网络是否能正常访问,结果依旧有网络错误。且确认用户不开VPN能够正常访问谷歌商店以及其他APP。
- 本地(国内)ping边缘服务器能够正常ping通,沟通用户用下载网络链路测试APP工具PingTools,显示全链路不通
- 结合网上案例,基本确认是用户本地 ISP 到 Cloudflare 这段路径有问题,当地电信运营商封锁/限制了部分 Cloudflare IP 段。
4. 尝试的解决方法
- 从网上了解到,Cloud Flare有一个路由优化的服务Argo Smart Routing,登录CF的管理后台,发现本来就有开启这个服务。进一步了解,这个玩意主要是优化CF内部链路的,没法解决用户到边缘服务器的链路问题。
- 老老实实提工单,尝试让CF的技术人员调整下分配的边缘服务器,但结果是让我先提供用户的MTR结果。
- 时间上已经等不及了,上面已经明确了是用户到CF边缘服务器的链路问题,那么更直接的方法是不用CF的代理,不用CDN加速和WAF,但是这个有暴露源站的风险。原本计划用阿里云的国际加速,但是需要额外费用(固定+按量付费)。后面去AWS问了下,有按量付费的服务,而且AWS有分发策略功能,也有CND加速和AWS,刚好匹配阿里云的ALB。
5. 具体实施步骤
- 登录AWS管理后台,切换到 us-east-1 区域!切换到 us-east-1 区域!!切换到 us-east-1 区域!!!这一步很重要。
- ACM → 请求证书 → 公有证书
- 填写之前在CF中解析的域名
- 验证方式选 DNS 验证
- 创建后,把给出的 CNAME 记录添加到 DNS
- 等待状态变为 ISSUED
- 创建 CloudFront 分发策略
- 分发创建后会生成一个 dxxxxxx.cloudfront.net 域名
- 登录CF后台,原本的域名解析由代理(橙色云)模式改为仅解析模式(灰色云),解析值由原来的ALB地址改为分发的AWS域名,这一步我是直接全量切换的,如果有区域需求,可以使用Route53做精细化分流,比如说某些国家还是走CF代理
6. 注意事项
- 创建 CloudFront 分发时,要注意无论是用CLI还是GUI页面创建,PriceClass这个参数要注意下,需要涉及到分发的服务器分布,会影响链路的速度。
- 另外还有一点要注意的,ViewerProtocolPolicy,如果之前兼容http的话,不要设置为https-only,或者设置为http转https
- 我这种操作,需要切换到us-east-1 区域,可能是由于当初AWS初始的服务器在这个区域,所以有些服务这个区域才有
- 另外个人感觉切换为AWS做分发后,虽然据说AWS的边缘服务器比CF的多,但是感觉响应速度没有之前快了,就算PriceClass调整后,效果也不大