您通过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 buckets403错误

问题原因

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重写规则