CloudFront 后面的 Route 53 地理定位路由是否会在用户或边缘站点上运行?

Ian*_*.B. 3 amazon-cloudfront amazon-web-services amazon-route53

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

Mic*_*bot 5

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

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

你可以做的是通过配置CloudFront的白名单的选择基于观众的国家起源服务器CloudFront-Viewer-Country请求头,然后使用Lambda @边缘原点请求触发修改原产地域名以及可能的Host请求的头,根据检测到的国家。

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

实施例:使用由来请求触发到更改原点域名基于所述国家页眉亚马逊CloudFront的开发指南的代码的一个简单的例子为这样的触发。自定义它以匹配您的业务规则。


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