为什么我的 Web 内容的流量被路由到错误的 CloudFront 边缘站点?
我正在使用 Amazon CloudFront 来分发我的 Web 内容。但是,我的网站的流量被路由到错误的边缘站点。如何解决此问题?
简短描述
CloudFront 根据发行版的价格类别、关联的地理定位数据库和 EDNS0-Client-Subnet 支持路由流量。由于这些因素的综合影响,您的网站查看器可能会路由到非预期的边缘站点。这可能会增加从 CloudFront 边缘站点检索对象的整体延迟。
要排查路由到非预期的边缘站点的问题,请检查以下各项:
- 价格类别支持您预期的边缘站点。
- DNS 解析程序支持任播路由。
- DNS 解析程序支持 EDNS0-Client-Subnet。
解决方法
价格类别支持您预期的边缘站点
检查您的 CloudFront 发行版的价格类别中包含的边缘站点。如果要包括其他边缘站点,您可以更新发行版的价格类别。
DNS 解析程序支持任播路由
如果 DNS 解析程序支持任播路由,则 DNS 解析程序使用多个边缘站点。这意味着请求者的边缘站点基于最佳延迟,这可能会导致解析程序的 IP 地址为非预期站点。
要检查 DNS 解析程序是否支持任播,请多次运行以下命令之一:
**注意:**在这些示例命令中,请确保使用您正在使用的 DNS 解析程序域名替换 example.com。
在 Linux 或 macOS 上,请运行类似以下内容的 dig 命令:
dig +nocl TXT o-o.myaddr.l.example.com
在 Windows 上,请运行类似以下内容的 nslookup 命令:
nslookup -type=txt o-o.myaddr.l.example.com
如果每次运行命令时输出都包含相同的 IP 地址,则 DNS 解析程序不支持任播。如果每次运行命令时输出都包含不同的 IP 地址,则 DNS 解析程序支持任播。这可能解释了意外的边缘站点。
DNS 解析程序支持 EDNS0-Client-Subnet
要确定如何避免不正确的路由,请先通过运行以下命令之一检查 DNS 解析程序是否支持 EDNS0-Client-Subnet:
**注意:**在这些示例命令中,请确保使用您正在使用的 DNS 解析程序域名替换 example.com。
在 Linux 或 macOS 上,请运行类似以下内容的 dig 命令:
dig +nocl TXT o-o.myaddr.l.example.com
在 Windows 上,请运行类似以下内容的 nslookup 命令:
nslookup -type=txt o-o.myaddr.l.example.com
**注意:**检查 TTL 值,并确保在 TTL 到期时运行命令。否则,您可能会从递归解析程序获得缓存的响应。
如果 DNS 解析程序不支持 EDNS0-Client-Subnet,则输出类似于以下内容:
$ dig +nocl TXT o-o.myaddr.l.example.com +short "192.0.2.1"
在以上示例中,192.0.2.1 是使用任播的最近的 DNS 服务器 IP 地址。此 DNS 解析程序不支持 EDNS0-Client-Subnet。为避免不正确的路由,您可以执行下列操作之一:
- 将 DNS 解析程序更改为其地理位置更靠近您网站客户端的递归 DNS 解析程序。
- 更改为支持 EDNS0-Client-Subnet 的 DNS 解析程序。
如果 DNS 解析程序支持 EDNS0-Client-Subnet,则输出包含到 CloudFront 权威名称服务器的截断客户端子网(/24 或 /32),与以下内容类似:
$ dig +nocl TXT o-o.myaddr.l.example.com @8.8.8.8 +short "192.0.2.1" "edns0-client-subnet 198.51.100.0/24"
在以上示例中,192.0.2.1 是最近的 DNS 解析程序的 IP 地址。此外,客户端子网范围是 198.51.100.0/24,用于响应 DNS 查询。为避免当 DNS 解析程序支持 EDNS0-Client-Subnet 时路由不正确,请确认公共地理定位数据库与向 DNS 解析程序发送查询的客户端子网范围相关联。如果 DNS 解析程序将截断版本的客户端 IP 地址发送到 CloudFront 名称服务器,则 CloudFront 将检查基于多个公共地理定位数据库的数据库。必须在地理定位数据库中正确映射 IP 地址,以便正确路由请求。
如果 DNS 解析程序支持 EDNS0-Client-Subnet,您可以先通过运行 DNS 查找命令(如 dig)来解析您的 CloudFront 别名记录,以验证流量路由到的边缘站点:
$ dig dftex7example.cloudfront.net. +short 13.224.77.109 13.224.77.62 13.224.77.65 13.224.77.75
然后,对上一个命令返回的 IP 地址运行反向 DNS 查找:
$ dig -x 13.224.77.62 +short server-13-224-77-62.man50.r.cloudfront.net.
在以上示例中,流量将被路由到 Manchester 边缘站点。
提示:对于其他测试,您可以使用支持 EDNS0-Client-Subnet 的公共 DNS 解析程序,例如 8.8.8.8 或 8.8.4.4。将使用边缘站点 IP 地址的查询发送到公共 DNS 解析程序。然后,检查 DNS 查询的结果,以查看 CloudFront 是否具有关于 EDNS0-Client-Subnet 的正确信息。

相关内容
- 已提问 5 个月前lg...
- 已提问 4 个月前lg...
- 已提问 5 个月前lg...
- 已提问 4 个月前lg...
- 已提问 5 个月前lg...
- AWS 官方已更新 10 个月前
- AWS 官方已更新 3 个月前
- AWS 官方已更新 1 年前
- AWS 官方已更新 4 个月前