您通過CDN對OSS儲存上的靜態資源做分發加速時,同時希望在開啟CDN私人Bucket的情況下,使用OSS的靜態網站託管。通過本文,為您解決該情況下的訪問報錯問題。
背景資訊
- OSS的靜態網站託管功能:配置靜態網站託管。
- OSS私人Bucket回源功能:OSS私人Bucket回源。
問題現象
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重寫規則。