问题描述
使用阿里云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
。有关重写规则的具体操作,请参见配置重写。