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一部分
- 通過泛域名解析到公有云廠商服務器上
自定義域名
這個是初學者最難理解的一種訪問方式。先說一個具體的例子,如果你要使用自定義域名下載訪問對象,怎麼操作?
- 首先,用戶需要自己搞定一個能用的域名,並且把這個域名cname到你需要訪問的S3 endpoint;
- 其次,用戶在廠商提供的對象存儲的管理界面上配置綁定這個域名到某個bucket;(旁白:這個只是存儲一個map映射:域名到bucket的映射)
準備好了前面兩個步驟,你就可以用自定義域名來訪問資源:
// 注意:這裏不需要指定bucket,只需要指定對象key
http://${自定義域名}.com/photo.jpg
解釋下這兩個步驟的作用:
- 第一個步驟:用戶負責S3請求發到S3的服務器上,用戶負責這個路徑的連通
- 第二個步驟:對象存儲服務端 會創建一個map,負責解析這個域名到bucket的映射(旁白:對象存儲服務器說,只要你請求發的過來,我就能找到這個域名對應的bucket)
AWS S3的廠商推薦使用的是Virtual-hosted style URL。提供這種方式訪問的廠商,要能支持泛域名解析。其實對於公有云廠商,更願意推薦你使用自定義域名的方式。爲啥?可以思考下。
舉個例子,如果用戶使用的是Path Style訪問,那麼Host使用的就是廠商統一的域名,如果用戶在雲存儲上放置了一些非法的內容,很有可能會連累存儲廠商的自身域名被封,這樣的影響是非常嚴重的,會導致整個存儲服務掛掉,影響所有用戶。
關注公衆號:奇伢雲存儲