Amazon-Route53

根據地理位置,為來自同一域的兩個靜態 S3 網站提供服務

  • January 26, 2017

我目前的設置是 www.domain.com 通過 CloudFront 為 S3 託管的靜態網站提供服務,因此 www.domain.com CNAME 指向 CloudFront 分配,而後者又指向 S3 靜態網站 URL。CloudFront 分配已www.domain.com設置為備用域名。

我想使用 Route53 的地理位置功能將來自北美的請求路由到目前的 CloudFront (A),而所有其他請求都轉到託管另一個 S3 靜態網站的另一個 CloudFront (B)。由於我無法www.domain.com為兩個 CloudFront 分配添加備用域名,因此我使用萬用字元*.domain.com代替 CloudFront A。

萬用字元有效,例如eu.domain.com我設置正確地為 CloudFront B 站點提供服務。

我已經在 Route53 中正確設置了地理位置規則,並dig返回了正確的 CloudFront 端點。同樣,Route53 Web 測試平台會根據 IP 位置提供正確的端點。但是,curlWeb 瀏覽器提供了錯誤的內容——即 CloudFront A,即使我在歐盟。

我的配置有問題嗎?出於某種原因,是否在 A 發行版的 DNS 級別上進行了靜默故障轉移?還是一些討厭的記憶體?這完全可以做到嗎?謝謝!

然而,curl 和 web 瀏覽器給出了錯誤的內容

實際上,它們在上下文中給出了正確的內容。(堅持我,這裡……)

問題 - 從技術上講 - 是您實際上想要/期望一個實際上不正確的響應 - 如果它實際上按照您所期望的方式工作,那麼根據提出的請求,行為將是錯誤的。

使用 . 查看請求標頭curl -v。他們可能正在連接到通過查詢檢索到的地址,eu.example.com但請檢查此請求標頭:

> Host: www.example.com

瀏覽器實際上得到了它所要求的。

這就是您不能將相同的備用域名分配給兩個 CloudFront 分配的原因。CloudFront - 基本上與所有 Web 伺服器一樣 - 使用Host:瀏覽器發送的標頭來了解瀏覽器想要查看的站點。Web 伺服器看不到引導您訪問它們的 DNS 路徑。您可以在連接到為不同站點返回的 IP 地址時執行此操作這一事實並不令人驚訝——選擇任何 CloudFront IP 並Host:為不同站點偽造標頭,這很可能會奏效,因為很有可能偵聽該地址的 CloudFront 設備可以在 CloudFront 中找到配置並為請求提供服務。

僅使用 CloudFront 和 Route 53 無法完成此配置。

您需要歐盟目標區域的 EC2 中的代理伺服器充當 DNS 中 eu 域的目標,重寫Host:標頭,並將修改後的請求轉發到 CloudFront。

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