您通過CDN對OSS儲存上的靜態資源做分發加速時,同時希望在開啟CDN私人Bucket的情況下,使用OSS的靜態網站託管。通過本文,為您解決該情況下的訪問報錯問題。

背景資訊

問題現象

OSS Bucket使用權限設定為私人、開啟靜態網站託管功能且CDN開啟OSS私人Bucket回源。

使用者訪問https://example.com/,希望能夠訪問網站首頁https://example.com/index.html,但是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的私人Bucket回源功能和OSS靜態網站託管功能的預設首頁配置衝突。

说明 OSS的Bucket在配置靜態網站託管的時候,需要佈建網域名的預設首頁為指定檔案,例如index.html,使用匿名身份訪問網站網域名稱(例如:https://example.com/)的時候會自動解析到預設首頁(例如:https://example.com/index.html)。但是CDN開啟OSS私人Bucket回源功能後,訪問CDN加速網域名稱產生的回源OSS請求相當於非匿名身份發起的根目錄訪問請求,而該請求預設會被OSS拒絕,導致使用者訪問被拒絕而出現“You are forbidden to list buckets”報錯。

解決方案

  • 方案一:如果您不需要使用OSS的靜態網站託管功能,關閉OSS的靜態網站託管功能即可。具體方法,請參見配置靜態網站託管刪除靜態網站託管配置。
  • 方案二:如果您需要使用OSS的靜態網站託管功能,那麼在開啟OSS的靜態網站託管功能後,您需要在CDN中配置URI重寫規則,避免出現CDN回源訪問根目錄的情況。

    配置方法:待重写URI配置為支援根目錄訪問的^/$目标URI配置為/index.html执行规则選擇Redirect。配置完成後,當用戶端請求www.example.com/時,CDN節點將返回302讓用戶端重新請求www.example.com/index.html的內容。具體步驟,請參見配置URI重寫規則