Domain-Name-System

Amazon S3 - 用於路由裸 URL 的選項

  • February 25, 2015

問題

我正在使用自定義域在亞馬遜 S3 上託管靜態 index.html。在我的域上一切正常:site.com。但是,當我訪問www.site.com時出現錯誤。據我了解,我需要將 www URL 301 重定向到裸 URL。

似乎有幾種方法可以做到這一點,但我對 DNS 的理解是有限的,而且聽起來很多這些選項都是不可取的。

選項

  1. 有兩條 A 記錄,一條帶 www,一條不帶。顯然這可能會導致 SEO 問題,因為Google會將其視為重複內容。
  2. 有一個重定向桶,所有都通過。這可能會導致雲端出現問題。 https://stackoverflow.com/questions/10115799/set-up-dns-based-url-forwarding-in-amazon-route53
  3. 使用 PTR 記錄重定向 - 但顯然這是不可取的。 如何在 Route53 中將 www 重定向到非 www?
  4. 由於我的名字是 Godaddy,請使用 godaddy 重定向: https ://support.google.com/blogger/answer/58317?hl=en
  5. 使用 wwwizer http://wwwizer.com/naked-domain-redirect之類的免費服務
  6. 使用亞馬遜儲存桶重定向。這帶來了每個域需要兩個儲存桶的大問題,這意味著我只能擁有 50 個域而不是 100 個。這對我來說是個問題。 http://i.stack.imgur.com/lqict.png

我試圖列出我知道的每一個選項。考慮到性能、可靠性和 SEO,請對域和 DNS 有更好理解的人幫助我確定最佳路徑。

選項 1 不適用於 S3 託管的網站,因為 S3 在Host:傳入 HTTP 請求的標頭中看到的內容必須與儲存桶的名稱完全匹配,並且設置重複的 A 記錄不會解決您的問題。

出於同樣的原因,選項 2 將不起作用 - 請求將永遠不會到達包含重定向規則的儲存桶,除非請求指向儲存桶的實際名稱。您連結到的答案只不過是執行選項 6 的“艱難方式”,並且每個主機名需要一個儲存桶。

選項 3 沒有用,因為 PTR 記錄不會導致瀏覽器重定向。通常用於反向 DNS,PTR 記錄在此上下文中沒有應用。

選項 4 Go Daddy 有名為“域轉發”和“子域轉發”的選項,但這意味著您必須讓您的 DNS 由 Go Daddy 託管,而不僅僅是在那裡註冊您的域(這是兩個不同的東西,通常但不一定,一起走)。如果這是您現在所擁有的,您可以將“www”子域 (www.example.com) “轉發”到 Go Daddy 通過為 www.example.com 創建 A 或 CNAME 記錄來完成的頂點 (example.com)指向他們自己的 Web 伺服器,生成 HTTP 301 或 302 重定向到http://example.com. 如果您的 DNS 由 Go Daddy 託管,而不是在 Route 53 上,那麼這可能是最簡單的選項,但如果您的 DNS 不是由 Go Daddy 託管,則此選項不可用。由於您將域的頂點用作 S3 中的網站,因此我假設您的 DNS 由 Route 53 託管,這意味著這將不起作用。

選項 5 似乎是個壞主意,在等式中引入了不必要的第三方,但更重要的是,它解決了錯誤的問題。他們不會將 www.example.com 重定向到 example.com,而是將 example.com 重定向到 www.example.com

選項 6 是一個不錯的選擇,但存在您提到的缺點,即每個 AWS 賬戶可用的儲存桶數量有限。


如果您有這麼多不同的域,那麼另一種選擇是在 EC2 中分配一個彈性 IP 地址(這樣您就有一個不會更改的靜態端點 IP 地址),然後啟動一個綁定到該 IP 地址的微型實例,然後在上面安裝HAProxy。HAProxy 實際上設計用於前端實際 Web 伺服器並負載平衡來自外部世界的流量,但它也具有生成重定向的能力。配置不是很複雜,HAProxy 對 CPU 的使用效率很高,所以我希望你可以從 Micro 中獲得很多工作,但如果流量需要的話,總是可以將它擴展到更大的實例。

您將在埠 80 上配置前端偵聽器:

frontend main
   bind *:80

然後為每個域創建一個訪問控制列表 (acl) 以監視在“主機”http 標頭中包含該主機名的請求…

   acl www.example.com hdr(host) -i www.example.com

…然後配置重定向以生成 301 到所需的主機名。

   redirect prefix http://example.com if www.example.com

在 DNS 中,您需要為 www.example.com 配置一條指向此微型實例的公有彈性 IP 地址的 A 記錄。

使用此配置,路徑被保留,因此發送到任何路徑的請求,如http://www.example.com/foo/bar的 sush將遇到 HTTP 301 重定向到另一個完全相同的路徑域,例如http://example.com/foo/bar

您可以使用在機器上執行的實際 Web 伺服器(例如 Nginx 或 Apache)執行類似的操作,但 HAProxy 是一個非常重但輕量級的工具,似乎非常適合此類任務,並生成這樣的重定向這是我在操作中使用它的一件事。

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