一文讀懂 對象存儲S3訪問姿勢

S3支持三種資源訪問方式:

  • Path Style URL
  • Virtual-hosted Style URL
  • 自定義域名

本質上,對象存儲使用bucket,key來唯一標識一個對象,所以只要你告訴對象存儲服務端這兩個東西,那麼理論上就能定位到這個數據。以上三種方式,總歸都是爲了獲取到(bucket,object_key)。

Path Style URL

在Path Style URL中,bucket的名字緊跟在domain之後,成爲URL path的一部分。

http://s3endpoint/BUCKET

比如,如果有一個photo.jpg存放在region爲us-west-2,bucket爲images的bucket中。可以用以下方式來訪問:

http://s3-us-west-2.amazonaws.com/images/photo.jpg

重點:

  • 所有用戶請求Host相同(旁白:在魚龍混雜的互聯網環境下,這種方式有個坑,思考下?)
  • bucket和key在URL裏面:/ {bucket} / {key}

Virtual-Hosted Style URL

在Virtual-Hosted Style URL 中,bucket的名稱成了subdomain:

http://BUCKET.s3endpoint

比如,如果有一個photo.jpg存放在region爲us-west-2,bucket爲images的bucket中。可以用以下方式來訪問:

http://images.s3-us-west-2.amazonaws.com/photo.jpg

推薦使用Virtual-Hosted Style的訪問方式。因爲這個可以提高訪問性能,少一跳。

重點:

  • bucket取自host一部分
  • 通過泛域名解析到公有云廠商服務器上

自定義域名

這個是初學者最難理解的一種訪問方式。先說一個具體的例子,如果你要使用自定義域名下載訪問對象,怎麼操作?

  1. 首先,用戶需要自己搞定一個能用的域名,並且把這個域名cname到你需要訪問的S3 endpoint;
  2. 其次,用戶在廠商提供的對象存儲的管理界面上配置綁定這個域名到某個bucket;(旁白:這個只是存儲一個map映射:域名到bucket的映射)

準備好了前面兩個步驟,你就可以用自定義域名來訪問資源:

// 注意:這裏不需要指定bucket,只需要指定對象key
http://${自定義域名}.com/photo.jpg

解釋下這兩個步驟的作用:

  • 第一個步驟:用戶負責S3請求發到S3的服務器上,用戶負責這個路徑的連通
  • 第二個步驟:對象存儲服務端 會創建一個map,負責解析這個域名到bucket的映射(旁白:對象存儲服務器說,只要你請求發的過來,我就能找到這個域名對應的bucket)

AWS S3的廠商推薦使用的是Virtual-hosted style URL。提供這種方式訪問的廠商,要能支持泛域名解析。其實對於公有云廠商,更願意推薦你使用自定義域名的方式。爲啥?可以思考下。

舉個例子,如果用戶使用的是Path Style訪問,那麼Host使用的就是廠商統一的域名,如果用戶在雲存儲上放置了一些非法的內容,很有可能會連累存儲廠商的自身域名被封,這樣的影響是非常嚴重的,會導致整個存儲服務掛掉,影響所有用戶。


\color{#ea4335}{堅持思考,方向比努力更重要。}
關注公衆號:奇伢雲存儲

關注我,獲取更多幹貨

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章