帶有 S3 重定向的 Amazon Cloudfront
我正在嘗試做一些應該相對簡單的事情 - 我想設置一些域和子域來重定向到我們網站的核心域,但我想將重定向放在 Cloudfront 上。除了重定向根路徑外,一切正常——這讓我得到了一個部分描述 S3 儲存桶的 XML 文件。
背景
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 - 我剛剛打開和關閉預設根對象進行測試。
以及該發行版的 Origin 配置:
解決方案:按照問題中的說明設置重定向,然後等待 S3 和 CloudFront 記憶體時間。它們可能需要 4 小時或更長時間,因此您只需將其全部設置好,然後等待並期待最好的結果。
(這是評論中邁克爾的解決方案,但現在已經有好幾年了,這真的應該被標記為已回答)。
如果您遇到此問題,請在為雲端配置 s3 儲存桶源時首先檢查,自動完成功能會返回 s3 REST 端點domain.amazonaws.com,它會返回此 ListBucketResult 響應。
您必須手動記下網站端點 domain.s3-website-region.amazonaws.com
**重要提示:**如果您錯誤地使用 REST 端點配置了雲端,您必須通過 Invalidations 使記憶體無效,否則它將繼續返回 REST 響應