您通过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请求相当于非匿名身份发起的根目录访问请求,而该请求默认会被CDN拒绝,导致用户访问被拒绝而出现“You are forbidden to list buckets”报错。解决方案
- 方案一:如果您不需要使用OSS的静态网站托管功能,关闭OSS的静态网站托管功能即可。具体方法,请参见静态网站托管概述删除静态网站托管配置。
- 方案二:如果您需要使用OSS的静态网站托管功能,那么在开启OSS的静态网站托管功能后,您需要在CDN中配置URI重写规则,避免出现CDN回源访问根目录的情况。
配置方法:待重写的Path配置为支持根目录访问的
^/$
,目标Path配置为/index.html
,执行规则选择Redirect。配置完成后,当客户端请求www.example.com/
时,CDN节点将返回302让客户端重新请求www.example.com/index.html
的内容。具体步骤,请参见配置访问URL改写规则。