問題描述
使用阿里云CDN加速OSS資源時,當源站為OSS且Bucket設置為私有時,開啟靜態網站托管功能且CDN開啟OSS私有Bucket回源的情況下,訪問CDN加速域名返回403 Forbidden
并提示以下錯誤:
You don't have permission to access the URL on this server
查看瀏覽器調試信息可以看到以下響應信息:
X-Tengine-Error: You are forbidden to list buckets
系統顯示類似如下。
問題原因
CDN回源OSS私有Bucket功能與OSS的靜態網站托管功能的默認首頁配置存在沖突。開啟回源私有Bucket后,CDN回源時默認會帶上簽名信息,即非匿名訪問,而觸發靜態網站默認首頁的請求必須是匿名請求。
OSS的Bucket在配置靜態網站托管時,需要配置域名的默認首頁為指定文件,例如index.html。使用匿名身份訪問網站域名(例如:https://example.com/)時會自動解析到默認首頁(例如:https://example.com/index.html)。但是CDN開啟OSS私有Bucket回源功能后,訪問CDN加速域名產生的回源OSS請求相當于非匿名身份發起的根目錄訪問請求,而該請求默認會被OSS拒絕。
解決方案
在開啟私有OSS Bucket回源后,訪問CDN加速域名發生報錯的排查方法如下:
請檢查靜態網站托管配置情況。
如果配置了OSS的靜態網站托管功能,您可以根據實際情況選擇以下一種解決方法進行處理:
如果不需要使用OSS的靜態網站托管功能,請關閉OSS的靜態網站托管功能,詳情請參見靜態網站托管概述。
如果需要使用OSS的靜態網站托管功能,則需要直接訪問CDN加速域名來實現訪問靜態首頁,需要將OSS設置為公共讀,同時關閉OSS的私有Bucket回源。如何關閉OSS的私有Bucket回源,請參見OSS私有Bucket回源。
如果沒有配置OSS的靜態網站托管功能,請繼續執行下一步進行排查。
在CDN側將根域名URL重寫為指向根域名URL下的某個文件,例如將CDN加速域名
www.example.com
重寫為www.example.com/index.html
。有關重寫規則的具體操作,請參見配置重寫。