Redirect

帶有 S3 重定向的 Amazon Cloudfront

  • March 6, 2018

我正在嘗試做一些應該相對簡單的事情 - 我想設置一些域和子域來重定向到我們網站的核心域,但我想將重定向放在 Cloudfront 上。除了重定向根路徑外,一切正常——這讓我得到了一個部分描述 S3 儲存桶的 XML 文件。

背景

S3

S3 允許您設置一個全重定向儲存桶,例如:

S3 重定向所有請求設置

對此進行測試,Web 端點 (brass9-com.s3-website-us-west-1.amazonaws.com) 做了它應該做的 - 它重定向到 bras9.com。好的。

雲前

Cloudfront 允許您指向 S3 儲存桶,但它建議您這樣做的方式是錯誤的 -您需要使用上面的 Web 端點,而不是按其名稱指向儲存桶,如 bras9-com.s3.amazonaws.com 。除此之外,您可以將所有內容保留為預設值並獲得良好的重定向行為。所以,像www.brass9.com/portfolio這樣的路徑會正確地重定向到它應該去的地方。也很好。

問題 - 根域重定向

然後無法工作的一件事是從普通的www.brass9.com重定向。它沒有給你一個重定向,而是給你這個奇怪的結果:

<?xml version="1.0" encoding="UTF-8"?>
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Name>brass9-com</Name><Prefix></Prefix>
<Marker></Marker><MaxKeys>1000</MaxKeys><IsTruncated>false</IsTruncated>
</ListBucketResult>

好的… 。所以這並不完全出乎意料——因為沒有預設根對象。但是我可能會指定什麼預設根對象來防止這種行為?我需要指向的 S3 重定向對象(如果有)的名稱是什麼?還是有其他一些適當的配置,或者這只是 Amazon 需要修復的 Cloudfront 和 S3 互動方式中的一個錯誤?

已知不工作的解決方案:預設根對象

可以指定 index.html 的預設根對象,但它沒有任何幫助 - 它只是改變了問題。Cloudfront url 而是重定向到主站點上的 /index.html,這是一個 404(我們不使用 index.html 文件,它是一個伺服器端框架驅動的站點)。我可以在伺服器上放置一個 index.html,但這首先會破壞使用 Cloudfront 的小速度增益。

類似問題

一個問題提出了類似的問題,但由於某種原因得到了一個空白的 0 字節響應,而不是我所看到的 XML 響應。它不包括有關該問題或解決方案的問題。

相關文章

一篇文章建議您只在裸域和 www 域上為整個站點提供服務。這與任何使用者的書籤、您的搜尋排名等有關。您不應該這樣做。

一些討論在 S3 和 Cloudfront 上託管靜態網站而不是重定向方案,因此是不相關的。

那麼,我該如何正確地做到這一點?

Cloudfront 配置的螢幕截圖 - 沒有預設根對象,指向 S3 源。忽略 InProgress - 我剛剛打開和關閉預設根對象進行測試。

沒有指向 S3 的預設根對象的 Cloudfront 分發

以及該發行版的 Origin 配置:

Origin - 指向 S3,預設值

解決方案:按照問題中的說明設置重定向,然後等待 S3 和 CloudFront 記憶體時間。它們可能需要 4 小時或更長時間,因此您只需將其全部設置好,然後等待並期待最好的結果。

(這是評論中邁克爾的解決方案,但現在已經有好幾年了,這真的應該被標記為已回答)。

如果您遇到此問題,請在為雲端配置 s3 儲存桶源時首先檢查,自動完成功能會返回 s3 REST 端點domain.amazonaws.com,它會返回此 ListBucketResult 響應。

您必須手動記下網站端點 domain.s3-website-region.amazonaws.com

**重要提示:**如果您錯誤地使用 REST 端點配置了雲端,您必須通過 Invalidations 使記憶體無效,否則它將繼續返回 REST 響應

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