Amazon-Web-Services

CloudFront 後面的 Route 53 地理定位路由是否會在使用者或邊緣位置上執行?

  • August 19, 2019

如果我已將 CloudFront 設置為 Route 53 中的地址,並在 Route 53 中記錄地理定位路由,Route 53 是否會根據 CloudFront 邊緣位置 IP 或最終使用者的 IP 進行地理定位?

源伺服器的 DNS 查找在 CloudFront 的“後端”完成,並將基於 CloudFront 邊緣位置,不能用於測試查看器的地理位置。¹

(即使這在某種程度上可行,它仍然無法按預期工作,因為 CloudFront 不知道為其他查看者重用記憶體響應的適當標準,這些查看者可能位於不同的國家/地區但訪問相同的邊緣位置。)

您可以做的是通過將 CloudFront 配置為將請求標頭列入白名單,然後使用 Lambda@Edge 原始請求觸發器根據檢測CloudFront-Viewer-Country到的修改原始域名和可能的請求標頭來根據查看者的國家/地區選擇原始伺服器Host國家。

Origin Request 觸發器僅在記憶體未命中時觸發,因此當記憶體命中時,觸發器不需要觸發——響應是從記憶體中提供的。並且響應將是正確的,因為將標頭(例如CloudFront-Viewer-Country)列入白名單意味著 CloudFront 開始將該標頭視為記憶體鍵的一部分 - 因此 CloudFront 根據不同的值保留相同資源的單獨/獨立記憶體副本看到此標頭,除非該標頭值匹配(或不存在 - 這是一個單獨的記憶體版本),否則不會提供記憶體的響應。因此,給定頁面的記憶體命中要求CloudFront-Viewer-Country來自記憶體響應的響應與來自新請求的響應相匹配。簡而言之,CloudFront 在這樣的配置中就記憶體做正確的事™。

有關此類觸發器的程式碼的簡單範例,請參閱 Amazon CloudFront 開發人員指南中的範例*:*使用源請求觸發器根據國家/地區標頭更改源域名。自定義它以匹配您的業務規則。


¹但是,它可以用於從 CloudFront 到源伺服器的基於延遲的路由,因為基於延遲的路由的任務是選擇與地理位置相近但不基於地緣政治邊界的目標相對應的 DNS 響應。在這種情況下,最佳目標將是最接近邊緣而不是最接近觀察者的目標,儘管實際上這些目標通常是相同的,因為邊緣是根據與觀察者的接近程度在正面選擇的。

引用自:https://serverfault.com/questions/979862