概述
本文介紹OSS防盜鏈配置及常見錯誤排查方法。
詳細描述
什麼是Referer
Referer
是HTTP Header的一部分,當瀏覽器向Web伺服器發送請求時,一般會帶上Referer,告訴伺服器從哪個頁面連結過來的。
Referer的作用
- 防盜鏈。比如,網站訪問自己的圖片伺服器,圖片伺服器取到Referer來判斷是不是自己的網域名稱,如果是就繼續訪問,不是則攔截。
- 資料統計。比如,統計使用者是從哪裡連結過來訪問的。
Referer為空白
- 空Referer指的是HTTP請求中Referer頭部的內容為空白,或者HTTP請求中不包含Referer頭部。如果有下面兩種情況則Referer為空白。
- 當請求並不是由連結觸發產生。比如,直接把地址輸入地址欄裡開啟頁面。
- 從https頁面上的連結訪問到非加密的http頁面時,在http頁面上是檢查不到Referer的。
- 在防盜鏈設定中,允許空Referer和不允許空Referer的區別如下。
-
- 在防盜鏈的白名單設定中,如果指明白名單中包含空的Referer,那麼通過瀏覽器地址欄直接存取該資源URL是可以訪問到的。
- 如果不指明需要包含空的Referer,那麼通過瀏覽器直接存取也是被禁止的。
OSS防盜鏈
OSS防盜鏈是通過Referer來實現的,所以也簡稱為Refer或refer。
OSS防盜鏈配置
提示:Referer詳細的介紹及配置請參見防盜鏈。
OSS防盜鏈通過在控制台或SDK設定Bucket屬性來配置。
- OSS防盜鏈配置內容包括以下兩部分內容。
- 是否允許Referer欄位為空白的請求訪問。
- Referer欄位白名單。
- OSS防盜鏈配置中需要注意以下幾點。
- 使用者只有通過URL簽名或者匿名訪問Object時,才會做防盜鏈驗證。如果請求Header中有
Authorization
欄位時,不會做防盜鏈驗證。 - 一個Bucket可以支援多個Referer參數,這些參數之間由
,
分隔。 - Referer參數支援萬用字元
*
和?
,詳細解釋可參考萬用字元說明。 - 使用者可以設定是否允許Referer欄位為空白的請求訪問。
- 白名單為空白時,不會檢查Referer欄位是否為空白(不然所有的請求都會被拒絕)。
- 白名單不為空白,且設定了不允許Referer欄位為空白的規則,則只有Referer屬於白名單的請求被允許,其它請求(包括Referer為空白的請求)會被拒絕。
- 如果白名單不為空白,但設定了允許Referer欄位為空白的規則,則Referer為空白的請求和符合白名單的請求會被允許,其它請求都會被拒絕。
- Bucket的三種許可權(private、public-read、public-read-write)都會檢查Referer欄位。
- 使用者只有通過URL簽名或者匿名訪問Object時,才會做防盜鏈驗證。如果請求Header中有
- 萬用字元說明。
- 星號
*
:代替0個或多個字元。如果正在尋找以AEW開頭的一個檔案,但不記得檔案名稱其餘部分,可以輸入AEW*
,尋找以AEW開頭的所有檔案類型的檔案,如AEWT.txt
、AEWU.EXE
、AEWI.dll
等。要縮小範圍可以輸入AEW*.txt
,尋找以AEW開頭,並以.txt
為副檔名的檔案,如AEWIP.txt
、AEWDF.txt
。 - 問號
?
:代替一個字元。如果輸入love?
,尋找以love開頭的一個字元結尾檔案類型的檔案,如lovey
、lovei
等。要縮小範圍可以輸入love?.doc
,尋找以love開頭,任意一個字元結尾,並以.doc
為副檔名的檔案,如lovey.doc
、loveh.doc
。
- 星號
- 典型配置說明如下。
-
所有請求都可以訪問。
- 空Referer:允許Referer為空白。
- Referer列表:空。
-
帶有規定的Referer請求或不帶Referer的請求才能訪問。
- 空Referer:不允許Referer為空白。
- Referer列表:
http://*.oss-cn-beijing.aliyuncs.com
,http://*.aliyun.com
。
-
常見錯誤及排除
錯誤一:配置防盜鏈後用curl命令還是能擷取到視頻檔案
錯誤原因
可能開啟了CDN並且沒有配置CDN中的Referer。
解決方案
- 檢查是否開啟了CDN。CDN的Referer設定不可為空,且防盜鏈名單需與OSS一致。
- 調試OSS的Referer時,請先排除CDN的影響。且優先調試OSS的Referer,再調試CDN的Referer。
錯誤二:當Referer配置錯誤時HTTP提示”403“錯誤且OSS提示“You are denied by bucket referer policy.”錯誤
錯誤原因
通常有以下兩種主要原因。
- Referer為空白,請求Header中沒有Referer欄位或者Referer欄位為空白。
- Referer不在規定範圍或者格式錯誤。
解決方案
建議您清空瀏覽器緩衝後再進行調試。如果仍然存在異常錯誤,則參考如下步驟進行解決。
- Referer為空白時,通過在 中配置Referer。需要注意OSS的Referer只支援白名單,暫時不支援黑名單。
- Referer不在規定範圍或者格式錯誤時,需要確認是否配置
http://
或者https://
,並更正Referer的配置範圍,比如a.aliyun.com
和b.aliyun.com
,匹配於http://*.aliyun.com
或http://?.aliyun.com
。domain.com
匹配於http://domain.com
,而不是http://*.domain.com
。 - Referer報錯一般是網站類應用,瀏覽器中可以查看Header的Referer。如Chrome瀏覽器,按鍵盤
F12
開啟 開發人員工具,在 Network 中查看相應元素的Header。 - OSS返回的錯誤可以通過抓包擷取。如抓包工具Wireshark,篩選器可以指定為
host bucket-name.oss-cn-beijing.aliyuncs.com
。
相關文檔
其它錯誤的排除請參看OSS 403錯誤及排除。
適用於
- Object Storage Service