本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
儲存貯體的虛擬託管
虛擬託管是從單一 Web 伺服器服務多個網站的實務。區分 Amazon S3 REST API請求中的網站的一種方法是使用 Request-URI 的表觀主機名稱,而不是僅使用 URI 的路徑名稱部分。一般 Amazon S3 REST 請求會使用 Request-URI 路徑的第一個斜線分隔元件指定儲存貯體。反之,您可以使用 Amazon S3 虛擬託管,透過使用 REST Host
標頭來解決 API 呼叫中的儲存貯HTTP。實務上,Amazon S3 會將 Host
解譯為表示可在 https://
自動存取大部分的儲存貯體 (針對有限類型的請求)。如需 Amazon S3 區域和端點的完整清單,請參閱《Amazon Web Services 一般參考》中的 Amazon S3 端點和配額。bucket-name
.s3.region-code
.amazonaws.com
虛擬託管也有其他優勢。透過使用註冊網域名稱命名儲存貯體,並將該名稱設為 Amazon S3 的 DNS 別名,您可以完全自訂 Amazon S3 資源的 URL,例如 http://my.
。您也可以發佈到儲存貯體虛擬伺服器的「根目錄」。這項能力十分重要,因為許多現有應用程式都會在此標準位置中搜尋檔案。例如,預期都可以在根目錄中找到 bucket-name
.com/favicon.ico
、robots.txt
和 crossdomain.xml
。
重要
當您搭配 SSL 使用虛擬託管式儲存貯體時,SSL 萬用字元憑證只會比對不包含點 () 的儲存貯體.
。若要解決此限制,請使用 HTTP 或撰寫您自己的憑證驗證邏輯。如需詳細資訊,請參閱AWS 新聞部落格上的 Amazon S3 路徑取代計劃
路徑樣式請求
目前,Amazon S3 支援虛擬託管樣式和路徑樣式的 URL 存取 AWS 區域。不過,路徑樣式的 URLs 未來將會停止。如需詳細資訊,請參閱下列 Important (重要) 注意事項。
在 Amazon S3 中,路徑樣式的 URLs 使用下列格式:
https://s3.
region-code
.amazonaws.com/bucket-name
/key-name
例如,如果您amzn-s3-demo-bucket1
在美國西部 (奧勒岡) 區域中建立名為 的儲存貯體,而且想要存取該儲存貯體中的puppy.jpg
物件,則可以使用下列路徑樣式的 URL:
https://s3.us-west-2.amazonaws.com/amzn-s3-demo-bucket1/puppy.jpg
重要
更新 (2020 年 9 月 23 日) – 為確保客戶有時間轉換至虛擬託管的 URLs,我們決定延遲路徑式 URLs 的棄用。如需詳細資訊,請參閱 AWS 新聞部落格中的 Amazon S3 路徑廢除計畫 - 其他故事
警告
託管將從 Web 瀏覽器存取的網站內容時,請避免使用路徑樣式的 URLs,這可能干擾瀏覽器相同的原始伺服器安全模型。若要託管網站內容,建議您使用 S3 網站端點或 CloudFront 分佈。如需詳細資訊,請參閱AWS 透視引導模式中的將 React 型單頁應用程式網站端點部署至 Amazon S3 和Word。 Amazon S3 CloudFront
虛擬託管樣式請求
在虛擬託管樣式的 URI 中,儲存貯體名稱是 URL 中網域名稱的一部分。
Amazon S3 虛擬託管樣式的 URLs 使用下列格式:
https://
bucket-name
.s3.region-code
.amazonaws.com/key-name
在此範例中,amzn-s3-demo-bucket1
是儲存貯體名稱、美國西部 (奧勒岡)是區域,而 puppy.png
是金鑰名稱。
https://amzn-s3-demo-bucket1.s3.us-west-2.amazonaws.com/puppy.png
HTTPHost
標頭儲存貯體規格
只要您的GET
請求不使用 SSL 端點,您就可以使用 HTTP Host
標頭指定請求的儲存貯體。REST 請求中的Host
標頭解譯如下:
-
如果省略
Host
標頭或其值為s3.
,則請求的儲存貯體將是 Request-URI 的第一個斜線分隔元件,請求的索引鍵將是 Request-URI 的其餘部分。這是一般方法,如本節的第一個與第二個範例所述。省略region-code
.amazonaws.com.rproxy.goskope.comHost
標頭僅適用於 HTTP 1.0 請求。 -
否則,如果
Host
標頭值的結尾為.s3.
,則儲存貯體名稱是region-code
.amazonaws.com.rproxy.goskope.comHost
標頭值到.s3.
的前置元件。請求的金鑰是 Request-URI。這項解譯會將儲存貯體公開為region-code
.amazonaws.com.rproxy.goskope.com.s3.
的子網域,如本節的第三個與第四個範例所述。region-code
.amazonaws.com -
否則,請求的儲存貯體是
Host
標頭的小寫值,請求的金鑰是 Request-URI。當您已註冊與儲存貯體名稱相同的 DNS 名稱,並將該名稱設定為 Amazon S3 的一般名稱 (CNAME) 別名時,此解釋很有用。註冊網域名稱和設定 CNAME DNS記錄的程序超出本指南的範圍,但結果會以本節的最終範例說明。
範例
本節提供範例 URLs 和請求。
範例 – 路徑樣式的 URLs 和請求
此範例使用下列各項:
-
儲存貯體名稱 ‐
example.com
-
區域 - 美國東部 (維吉尼亞北部)
-
金鑰名稱‐
homepage.html
URL 如下所示:
http://s3.us-east-1.amazonaws.com/example.com/homepage.html
要求如下:
GET /example.com/homepage.html HTTP/1.1 Host: s3.us-east-1.amazonaws.com
使用 HTTP 1.0 並省略Host
標頭的請求如下所示:
GET /example.com/homepage.html HTTP/1.0
如需 DNS 相容名稱的相關資訊,請參閱限制。如需金鑰的詳細資訊,請參閱鍵。
範例 – 虛擬託管的 URLs 和請求
此範例使用下列各項:
-
儲存貯體名稱 ‐
amzn-s3-demo-bucket1
-
區域- 歐洲 (愛爾蘭)
-
金鑰名稱‐
homepage.html
URL 如下所示:
http://amzn-s3-demo-bucket1.s3.eu-west-1.amazonaws.com/homepage.html
要求如下:
GET /homepage.html HTTP/1.1 Host: amzn-s3-demo-bucket1.s3.eu-west-1.amazonaws.com
範例 – CNAME 別名方法
若要使用此方法,您必須將 DNS 名稱設定為 的 CNAME 別名
。如需詳細資訊,請參閱使用 URLs 記錄自訂 Amazon S3 CNAME 。bucket-name
.s3.us-east-1.amazonaws.com
此範例使用下列各項:
-
儲存貯體名稱 ‐
example.com
-
金鑰名稱‐
homepage.html
URL 如下所示:
http://www.example.com/homepage.html
範例如下:
GET /homepage.html HTTP/1.1 Host: www.example.com
使用 URLs 記錄自訂 Amazon S3 CNAME
根據需求,您可能不想要 s3.
出現在網站或服務上。例如,如果您在 Amazon S3 上託管網站映像,則可能會想要使用 region-code
.amazonaws.com.rproxy.goskope.comhttp://images.example.com/
,而不是 http://images.example.com.s3.us-east-1.amazonaws.com/
。任何具有 DNS 相容名稱的儲存貯體都可以參考,如下所示: http://
,例如 BucketName
.s3.Region
.amazonaws.com/[Filename
]http://images.example.com.s3.us-east-1.amazonaws.com/mydog.jpg
。透過使用 CNAME,您可以映射images.example.com
到 Amazon S3 主機名稱,以便上一個 URL 可以變成 http://images.example.com/mydog.jpg
。
您的儲存貯體名稱必須與 CNAME 相同。例如,如果您建立 CNAME 以映射images.example.com
至 images.example.com.s3.us-east-1.amazonaws.com
,則 http://images.example.com/filename
和 http://images.example.com.s3.us-east-1.amazonaws.com/filename
將相同。
CNAME DNS 記錄應該將您的網域名稱別名為適當的虛擬託管樣式主機名稱。例如,如果您的儲存貯體名稱和網域名稱是 ,images.example.com
且儲存貯體位於美國東部 (維吉尼亞北部) 區域,則 CNAME 記錄應該別名為 images.example.com.s3.us-east-1.amazonaws.com
。
images.example.com CNAME images.example.com.s3.us-east-1.amazonaws.com.
Amazon S3 會使用主機名稱來判斷儲存貯體名稱。因此 CNAME 和儲存貯體名稱必須相同。例如,假設您已www.example.com
將 設定為 的 CNAMEwww.example.com.s3.us-east-1.amazonaws.com
。當您存取 http://www.example.com
時,Amazon S3 會收到與下列類似的請求:
GET / HTTP/1.1 Host: www.example.com Date:
date
Authorization:signatureValue
Amazon S3 只會看到原始主機名稱,www.example.com
而且不知道用來解決請求的 CNAME 映射。
您可以在 CNAME 別名中使用任何 Amazon S3 端點。例如, s3.ap-southeast-1.amazonaws.com
可用於 CNAME 別名。如需端點的詳細資訊,請參閱 Amazon S3 API 參考中的請求端點。若要使用自訂網域建立靜態網站,請參閱 教學課程:使用向 Route 53 註冊的自訂網域設定靜態網站。
重要
將自訂 URLs 與 CNAMEs 搭配使用時,您需要確保所設定的任何 CNAME 或別名記錄存在相符的儲存貯體。例如,如果您為 www.example.com
和 建立 DNS 項目login.example.com
,以使用 S3 發佈 Web 內容,則需要同時建立儲存貯體www.example.com
和 login.example.com
。
當 CNAME 或別名記錄設定為指向沒有相符儲存貯體的 S3 端點時,任何 AWS 使用者都可以在設定的別名下建立該儲存貯體並發佈內容,即使擁有權不同。
由於相同的原因,我們建議您在刪除儲存貯體時變更或移除對應的 CNAME 或別名。
如何建立主機名稱與 Amazon S3 儲存貯體的關聯
使用 CNAME 別名將主機名稱與 Amazon S3 儲存貯體建立關聯
-
選取屬於所控制網域的主機名稱。
此範例使用
images
網域的example.com
子網域。 -
建立與主機名稱相符的儲存貯體。
在此範例中,主機與儲存貯體名稱為
images.example.com
。儲存貯體名稱必須完全符合主機名稱。 -
建立 CNAME DNS 記錄,將主機名稱定義為 Amazon S3 儲存貯體的別名。
例如:
images.example.com CNAME images.example.com.s3.us-west-2.amazonaws.com
重要
基於請求路由原因,必須完全定義 CNAME DNS記錄,如上述範例所示。否則,它可能看來操作正常,但最後會導致無法預期的行為。
設定 CNAME DNS記錄的程序取決於您的 DNS 伺服器或 DNS 供應商。如需特定資訊,請參閱伺服器文件或聯絡提供者。
限制
透過 HTTP 的 SOAP 支援已棄用,但 SOAP 仍可透過 HTTPS 使用。SOAP 不支援新的 Amazon S3 功能。SOAP建議您使用 REST 或 API,而不是使用 AWS SDKs。
回溯相容性
下列各節涵蓋與路徑樣式和虛擬託管樣式 URL 請求相關的 Amazon S3 向後相容性的各個層面。
舊版端點
某些區域支援舊版端點。您可能會在伺服器存取日誌或 AWS CloudTrail 日誌中看到這些端點。如需詳細資訊,請檢閱下列資訊。如需 Amazon S3 區域和端點的完整清單,請參閱《Amazon Web Services 一般參考》中的 Amazon S3 端點和配額。
重要
雖然您可能會在記錄檔中看到舊版端點,但建議您永遠使用標準端點語法來存取儲存貯體。
Amazon S3 虛擬託管樣式的 URLs 使用下列格式:
https://
bucket-name
.s3.region-code
.amazonaws.com/key-name
在 Amazon S3 中,路徑樣式的 URLs 使用下列格式:
https://s3.
region-code
.amazonaws.com/bucket-name
/key-name
s3‐Region
某些較舊的 Amazon S3 區域支援在 s3
和區域代碼 (例如 s3‐us-west-2
) 之間包含破折號 (-
),而不是點 (例如 s3.us-west-2
) 的端點。如果您的儲存貯體位於其中一個區域,您可能會在伺服器存取日誌或 CloudTrail 日誌中看到下列端點格式:
https://
bucket-name
.s3-region-code
.amazonaws.com
在此範例中,儲存貯體名稱為 , amzn-s3-demo-bucket1 而區域為美國西部 (奧勒岡):
https://amzn-s3-demo-bucket1.s3-us-west-2.amazonaws.com
舊版全域端點
對於某些區域,您可以使用舊版全域端點來建構未指定區域特定端點的請求。舊版全域端點如下所示:
bucket-name
.s3.amazonaws.com
在伺服器存取日誌或 CloudTrail 日誌中,您可能會看到使用舊版全域端點的請求。在此範例中,儲存貯體名稱為 amzn-s3-demo-bucket1
,且顯示舊版全域端點:
https://amzn-s3-demo-bucket1.s3.amazonaws.com
美國東部 (維吉尼亞北部) 虛擬託管樣式請求
依預設,使用舊版全域端點提出的請求會前往美國東部 (維吉尼亞北部) 區域。因此,有時候會使用舊版全域端點來取代美國東部 (維吉尼亞北部) 的區域端點。如果您在美國東部 (維吉尼亞北部) 建立儲存貯體並使用全球端點,則依預設,Amazon S3 會將您的請求路由至此區域。
其他區域的虛擬託管樣式請求
舊版全域端點也可用於其他支援區域中的虛擬託管樣式請求。如果您在 2019 年 3 月 20 日之前啟動的區域中建立儲存貯體,並使用舊版全域端點,Amazon S3 會更新 DNS 記錄,將請求重新路由至正確的位置,這可能需要一些時間。在此期間系統會套用預設規則,而您的虛擬託管樣式請求會傳送至美國東部 (維吉尼亞北部) 區域。然後,Amazon S3 會使用 HTTP 307 暫時重新導向至正確的區域。
對於 2019 年 3 月 20 日之後啟動的區域中的 S3 儲存貯體,DNS 伺服器不會將您的請求直接路由到 AWS 區域 儲存貯體所在的 。它會改為傳回 HTTP 400 錯誤請求錯誤。如需詳細資訊,請參閱在 Amazon S3 API 參考中提出請求。
路徑樣式請求
對於美國東部 (維吉尼亞北部) 區域,您可以將舊版全域端點使用於路徑樣式請求。
對於所有其他區域,在嘗試存取儲存貯體時,路徑型語法會需要您使用區域專用端點。如果您嘗試存取具有舊版全域端點或其他端點的儲存貯體,而該端點與儲存貯體所在的區域不同,則會收到 HTTP 回應碼 307 暫時重新導向錯誤,以及指出資源正確 URI 的訊息。例如,如果您將 https://s3.amazonaws.com/
用於在美國西部 (奧勒岡) 區域中建立的儲存貯體,則會收到 HTTP 307 暫時重新導向錯誤。bucket-name