開發與維運

OSS 回源功能

作者:張醫博

淺談

OSS 回源功能,也稱鏡像回源,可以類比 Nginx 的 PCRE 滿足一定條件下觸發的 rewrite 功能,但是 OSS 的功能更加豐富。大致分為了兩種主要功能,一種是 404 回源,另外是重定向回源。

使用的場景,一般是數據遷移、主備 OSS、CDN 結合 OSS、等多個場景。

功能說明

404

當客戶請求到 OSS 獲取資源時,如果 OSS 諮詢不存在,那麼會根據客戶配置的鏡像回源地址去拉去對應的資源,如果真正的源站有數據就會響應 OSS 200 ,OSS 會將文件一同存儲到本地,並且透傳給客戶端 200 的狀態碼。

在這個過程中,如果 OSS 回源沒有回去到資源,源站響應了 404 ,那麼 OSS 也直接將 404 透傳給用戶。

如果 OSS 回源獲取資源失敗,源站返回了一個非 200 404 的狀態碼,比如 502,那 OSS 會記錄 424 ,然後透傳給源站的狀態碼 502 給客戶端。

重定向

回源另外一個功能就是重定向,重定向,分為 301 、302、307。常用的就是 302 301,配置重定向功能後,客戶端請求到 bucket A 後,會直接 302 301 到用戶配置的 bucket B,客戶端直接根據 301 302 follow 到目的 bucket B。

配置功能

image.png

這裡不會給大家說全部的功能,因為詳細使用官網有,我們著重說下標紅的位置。

  • 文件前綴:如果勾選了文件前綴,擇訪問出現 404 後,只會針對匹配到的 OSS 前綴觸發鏡像回源,否則不會觸發。
  • 回源參數:如果是 CDN 回源時會攜帶很多參數,想要保留這些參數透傳到源站,可以開啟此參數。
  • 允許 header:如果配置了允許 所有header ,默認將客戶端請求過來的 header 全部透傳給源站。
  • 精緻 header :可以自定義哪些 header 是不透傳回源的。
  • 設置:觸發回源後,可以自定義一些請求頭透傳給源站。

案例介紹

一、配置了鏡像回源但是響應 404

  • 首先固定真正的源站訪問同樣的 URL 測試是否 200 ,只有源站響應了 200 的情況 OSS 回原才能獲取到資源。
  • 看是否配置了透傳所有 header 頭選項,如果配置了該選項需要同時配置禁止 host 頭透傳回去,否則會出現回源時 404 的問題。因為鏡像回源時會攜帶當前 bucket host 回源,所以目標源站肯定也響應 404 。

二、配置了鏡像回源但是響應 502

  • 出現這種問題,都是客戶源站響應超時導致,可以先固定源站的 URL 測試一下。
  • 分析對應時間點源站 error log 或者 access log 是否有 502 的情況,看下源站的網絡鏈路負載等。

三、鏡像回源的源站和訪問的域名一致

  • 訪問 www.a.com 資源 404 回源到 B.oss-cn-beijing.aliyuncs.com ,B bucket 上設置回源到 www.a.com ,這種情況是不可以的,會造成死循環的問題。
  • 訪問 A.oss-cn-beijing.aliyuncs.com 資源 404 回源到 B.oss-cn-beijing.aliyuncs.com ,B bucket 設置的源站是 A bucket 也不行。

四、鏡像回源報錯 "Error status: 0 from mirror host ,should return 200 ok"

image.png

出現類似報錯就是 OSS 在觸發鏡像回用戶原站拉資源時,源站沒有返回 200 的內容,而是返回了其他非 200 的狀態碼,導致拉取資源失敗。
這種場景,用戶端只要固定源站測試以下就可以知道問題。

Leave a Reply

Your email address will not be published. Required fields are marked *