CloudFront 后面的 Route 53 地理位置路由是否会对用户或边缘位置运行?

CloudFront 后面的 Route 53 地理位置路由是否会对用户或边缘位置运行?

如果我已将 CloudFront 设置为 Route 53 中的地址作为原点,并将地理位置路由设置为 Route 53 中的记录,那么 Route 53 会根据 CloudFront 边缘位置 IP 还是最终用户的 IP 进行地理位置定位?

答案1

原始服务器的 DNS 查找在 CloudFront 的“后端”完成,并将基于 CloudFront 边缘位置,不能用于测试查看器的地理位置。¹

(即使这在某种程度上是可能的,它仍然无法按预期工作,因为 CloudFront 不知道为其他查看者重新使用缓存响应的适当标准,这些查看者可能位于不同的国家,但访问同一边缘位置。)

您可以做的是根据查看者的国家/地区选择原始服务器,方法是将 CloudFront 配置为白名单CloudFront-Viewer-Country请求标头,然后根据检测到的国家/地区,使用 Lambda @ Edge Origin Request 触发器来修改原始域名以及可能的Host请求标头。

Origin Request 触发器仅在缓存未命中时触发,因此当缓存命中时,触发器无需触发 - 响应由缓存提供。并且响应将是正确的,因为将标头列入白名单(例如CloudFront-Viewer-Country)意味着 CloudFront 开始将该标头视为缓存键的一部分 - 因此 CloudFront 根据它看到的此标头的不同值保留相同资源的单独/独立的缓存副本,并且除非该标头值匹配(或不存在 - 这是一个单独的缓存版本),否则不会提供缓存响应。因此,给定页面的缓存命中要求来自CloudFront-Viewer-Country缓存响应的与来自新请求的匹配。简而言之,在这样的配置中,CloudFront 在缓存方面做了正确的事情™。

示例:使用源请求触发器根据国家/地区标头更改源域名来自Amazon CloudFront 开发人员指南此类触发器的代码简单示例。对其进行自定义以符合您的业务规则。


¹但是,它可以用于从 CloudFront 到源服务器的基于延迟的路由,因为基于延迟的路由的任务是选择与地理位置接近的目标相对应的 DNS 响应,而不是基于地缘政治边界。在这种情况下,最佳目标将是最靠近边缘的目标,而不是最靠近查看器的目标,尽管在实践中,这两个目标通常是相同的,因为边缘是根据与查看器的接近程度在前端选择的。

相关内容