通過回源設定,對於獲取數據的請求以多種方式進行回源讀取,滿足您對於數據熱遷移、特定請求重新導向等需求。

通過規則的方式,對每條到OSS的Get請求的url進行匹配,然後按照特定的方式進行回源。規則最多配置5條,順序匹配,直到匹配到有效規則。回源類型分為鏡像方式和重新導向的方式。

鏡像方式



如果配置了鏡像回寫,則當Get一個不存在的檔案時,會向源地址請求這個檔案,返回給用戶,並同時寫入到OSS。

使用場景

鏡像回寫主要用於無縫遷移數據到OSS,即服務已經在自己建立的源站或者在其他雲產品上運行,需要遷移到OSS上,但是又不能停止服務,此時可利用鏡像回寫功能實現。具體場景分析如下:

  • 源站有一批冷數據,同時在不斷的生成新的熱數據。

    可以先通過遷移工具將冷資料移轉到OSS上,遷移工具為ossimport2,同時配置鏡像回寫,將源站的地址配置到OSS上。當將網域名稱切換到OSS上(或者阿里雲的CDN,回源到OSS),就算有一部分新生成的數據沒有遷移過來,依然可以在OSS上正常訪問到,且訪問一次後檔案就會存入到OSS。網域名稱切換後,源站已經沒有新的數據產生了,此時再掃描一次,將還沒有導過來的數據一次性匯入到OSS,然後將鏡像回寫配置刪除。

    如果配置的源站是IP,那麼將網域名稱遷移到OSS後還可以繼續鏡像到源站,但是如果配置的是一個網域名稱,由於網域名稱本身會解析到OSS或者CDN,那麼鏡像就失去作用了,在這種情況下,可以另外申請一個網域名稱作為鏡像的源站,這個網域名稱與正在服務的網域名稱解析到同一個IP,這樣服務網域名稱遷移的時候就可以繼續鏡像到源站了。

  • 只切換源站的部分流量到OSS或者CDN,源站本身還在不斷的產生數據。

    遷移方式與上述方式類似,只是流量切換到OSS後,不要將鏡像回寫的配置刪掉,這樣可以保證切換到OSS或者CDN的流量還是能夠拿到源站的數據。

使用細則
  • 只有當GetObject()本應該返回404的情況下,OSS才會執行鏡像回寫,向源站請求檔案。
  • 向源站請求的url為MirrorURL+object,回寫到OSS的檔案名為“object”,例如bucket為example-bucket,配置了鏡像回寫,MirrorURL為http://www.example-domain.com/,檔案image/example_object.jpg不在這個bucket裡面,此時去下載這個檔案時,OSS將向http://www.example-domain.com/image/example_object.jpg發起GET請求,並將結果同時返回給用戶以及寫入到OSS,當下載完成後,這個檔案就已經存在OSS上了,檔案名為image/example_object.jpg,此時相當於將源站的檔案同名的遷移到了OSS上。如果MirrorURL帶有path資訊,比如http://www.example-domain.com/dir1/,其他與上例相同,那麼OSS回源的url為http://www.example-domain.com/dir1/image/example_object.jpg,寫入到OSS的object依然是image/example_object.jpg,此時相當於將源站的某一個目錄下的檔案遷移到OSS上。
  • 傳給OSS的header資訊不會傳遞給源站,querystring資訊是否會傳遞給源站取決於控制台回源規則中的配置。
  • 如果源站是chunked編碼返回,那麼OSS返回給用戶的也是chunked編碼。
  • OSS會將源站的以下頭資訊返回並存為OSS的頭資訊:
    Content-Type
    Content-Encoding
    Content-Disposition
    Cache-Control
    Expires
    Content-Language
    Access-Control-Allow-Origin
  • 通過鏡像回寫的檔案會添加一個回應頭x-oss-tag,值為“MIRROR” + 空格 + url_decode(回源URL),以上例為例,則為
    x-oss-tag:MIRROR http%3a%2f%2fwww.example-domain.com%2fdir1%2fimage%2fexample_object.jpg
    。檔案回寫到OSS上後,只要檔案不被重新覆蓋,每次下載這個檔案都會添加這個頭部,用於表示這個檔案來源於鏡像。
  • 假設檔案已經通過鏡像回寫到了OSS,如果源站的相同檔案發生了變化,那OSS不會更新已經存在於OSS上的檔案,因為此時檔案已經在OSS上,不符合鏡像回寫的條件了。
  • 如果鏡像源也不存在此檔案,即鏡像源返回給OSS的http status為404,那麼OSS也返回404給用戶,如果是其他非200的狀態碼(包括因為網路原因等獲取不到檔案的錯誤情況),OSS將返回用戶424,錯誤碼為“MirrorFailed”。

重新導向

URL重新導向功能的作用是根據使用者佈建的條件,以及相應的跳轉的配置,向用戶返回一個3xx跳轉。用戶可以利用這種跳轉的功能對檔案做重新導向以及在此基礎之上的各種業務。其流程如下:



使用場景
  • 其他資料來源向OSS的無縫遷移。

    用戶非同步從自己的資料來源向OSS遷移數據,在此過程中未遷移到OSS的數據通過URL rewrite的方式返回給用戶一個302重新導向請求,用戶的客戶端根據302中的Location從自己的資料來源讀回數據。

  • 配置頁面跳轉功能。

    比如用戶希望隱藏自己的某些首碼開頭的object,給訪問者返回一個特殊的頁面。

  • 配置發生404、或者500錯誤時的跳轉頁面。

    發生以上錯誤的時候用戶可以看到一個預先設定的頁面,不至於系統發生錯誤的時候向用戶完全暴露OSS的錯誤。

功能使用參考