您可以将存储空间(Bucket)设置为静态网站托管模式并设置镜像回源的跳转规则(RoutingRule)。静态网站托管模式配置生效后,访问网站相当于访问Bucket,并且能够自动跳转至指定的索引页面和错误页面。镜像回源的跳转规则配置生效后,可用于数据无缝迁移到OSS的场景。
注意事项
- 本文以华东1(杭州)外网Endpoint为例。如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的Region与Endpoint的对应关系,请参见访问域名和数据中心。
- 本文以OSS域名新建OSSClient为例。如果您希望通过自定义域名、STS等方式新建OSSClient,请参见Go初始化。
- 要设置静态网站托管或者镜像回源,您必须有
oss:PutBucketWebsite
权限;要获取静态网站托管或者镜像回源,您必须有oss:GetBucketWebsite
;要删除静态网站托管或者镜像回源,您必须有oss:DeleteBucketWebsite
权限。具体操作,请参见为RAM用户授权自定义的权限策略。
静态网站托管
静态网站是指所有的网页都由静态内容构成,包括客户端执行的脚本(例如JavaScript)。您可以通过静态网站托管功能将您的静态网站托管到Bucket,并使用Bucket的访问域名访问这个网站。
设置静态网站托管
以下代码用于设置静态网站托管:package main import ( "fmt" "os" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // 创建OSSClient实例。 // yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。 // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。 client, err := oss.New("yourEndpoint", "yourAccessKeyId", "yourAccessKeySecret") if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // 填写Bucket名称,例如examplebucket。 bucketName := "examplebucket" // 设置静态网站托管的默认主页为index.html, 默认404页为error.html。 err = client.SetBucketWebsite(bucketName, "index.html", "error.html") if err != nil { fmt.Println("Error:", err) os.Exit(-1) } }
查看静态网站托管配置
以下代码用于查看静态网站托管配置:
package main import ( "fmt" "os" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // 创建OSSClient实例。 // yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。 // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。 client, err := oss.New("yourEndpoint", "yourAccessKeyId", "yourAccessKeySecret") if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // 填写Bucket名称,例如examplebucket。 bucketName := "examplebucket" // 查看静态网站托管配置。 wsRes, err := client.GetBucketWebsite(bucketName) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } fmt.Println("indexWebsite: ", wsRes.IndexDocument.Suffix) fmt.Println("errorWebsite: ", wsRes.ErrorDocument.Key) }
删除静态网站托管配置
以下代码用于删除静态网站托管配置:
package main import ( "fmt" "os" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // 创建OSSClient实例。 // yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。 // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。 client, err := oss.New("yourEndpoint", "yourAccessKeyId", "yourAccessKeySecret") if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // 填写Bucket名称,例如examplebucket。 bucketName := "examplebucket" // 删除静态网站托管配置。 err = client.DeleteBucketWebsite(bucketName) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } }
镜像回源
镜像回源主要用于数据无缝迁移到OSS的场景。例如某服务已经在用户建立的源站或者在其他云产品上运行,现因业务发展,需要将服务迁移至OSS,迁移时需保证服务的正常运行。您可以在迁移过程中使用镜像回源规则获取未迁移至OSS的部分数据,保证服务的正常运行。
设置镜像回源
例如,当请求者访问目标Bucket中不存在的文件时,可以通过指定回源条件和回源地址,从源站中获取目标文件。例如您在华东1(杭州)有名为examplebucket的Bucket,您希望请求者访问Bucket根目录下examplefolder目录中不存在的文件时,可以从www.example.com站点的examplefolder目录获取目标文件。
以下代码用于设置符合上述场景的镜像回源规则:
package main import ( "fmt" "os" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // 创建OSSClient实例。 // yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。 // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。 client, err := oss.New("yourEndpoint", "yourAccessKeyId", "yourAccessKeySecret") if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // 填写Bucket名称,例如examplebucket。 bucketName := "examplebucket" putXml := `<WebsiteConfiguration> <IndexDocument> <Suffix>index.html</Suffix> <SupportSubDir>true</SupportSubDir> <Type>0</Type> </IndexDocument> <ErrorDocument> <Key>error.html</Key> <HttpStatus>404</HttpStatus> </ErrorDocument> <RoutingRules> <RoutingRule> <RuleNumber>1</RuleNumber> <Condition> <! --只有匹配此前缀的Object才能匹配此规则。--> <KeyPrefixEquals>examplefolder/</KeyPrefixEquals> <! --访问指定Object时,返回status 404才能匹配此规则。--> <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals> </Condition> <Redirect> <! --指定跳转的类型。--> <RedirectType>Mirror</RedirectType> <PassQueryString>true</PassQueryString> <! --指定镜像回源的源站地址。本示例中指定为https://www.example.com/。--> <MirrorURL>http://example.com/</MirrorURL>--> <! --指定执行跳转或者镜像回源规则时,是否携带请求参数。--> <PassQueryString>true</PassQueryString> <! --与PassQueryString作用相同,优先级高于PassQueryString。只有设置RedirectType为Mirror时生效。--> <MirrorPassQueryString>true</MirrorPassQueryString> <! --指定跳转时返回的状态码。只有设置RedirectType为External或者AliCDN时生效。--> <HttpRedirectCode>302</HttpRedirectCode> <! --指定跳转时的域名,域名需符合域名规范。--> <HostName>oss.aliyuncs.com</HostName> <! --指定跳转时的协议。只有设置RedirectType为External或者AliCDN时才生效。--> <Protocol>https</Protocol> <! --Redirect时Object名称将替换成ReplaceKeyWith指定的值,ReplaceKeyWith支持设置变量。--> <ReplaceKeyWith>key.jpg</ReplaceKeyWith> <! --如果设置此字段为true,则Object的前缀将被替换为ReplaceKeyPrefixWith指定的值。--> <EnableReplacePrefix>true</EnableReplacePrefix> <! --Redirect时Object名称的前缀将替换成该值。--> <ReplaceKeyPrefixWith>examplebucket</ReplaceKeyPrefixWith> <! --是否检查回源body的MD5。只有设置RedirectType为Mirror时生效。--> <MirrorCheckMd5>false</MirrorCheckMd5> <! --如果镜像回源获取的结果为3xx,是否继续跳转到指定的Location获取数据。 只有设置RedirectType为Mirror时才生效。--> <MirrorFollowRedirect>true</MirrorFollowRedirect> <MirrorHeaders> <! --是否透传除以下Header之外的其他Header到源站。只有设置RedirectType为Mirror时生效。--> <PassAll>true</PassAll> <! --透传指定的Header到源站。只有设置RedirectType为Mirror时生效。--> <Pass>myheader-key1</Pass> <Pass>myheader-key2</Pass> <! --禁止透传指定的Header到源站。只有设置RedirectType为Mirror时生效。--> <Remove>myheader-key3</Remove> <Remove>myheader-key4</Remove> <! --设置一个Header传到源站,不管请求中是否携带这些指定的Header,回源时都会设置这些Header。--> <Set> <Key>myheader-key5</Key> <Value>myheader-value5</Value> </Set> </MirrorHeaders> </Redirect> </RoutingRule> </RoutingRules> </WebsiteConfiguration> ` err = client.SetBucketWebsiteXml(bucketName,putXml) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } }
获取镜像回源配置
以下代码用于获取镜像回源配置:
package main import ( "fmt" "os" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // 创建OSSClient实例。 // yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。 // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。 client, err := oss.New("yourEndpoint", "yourAccessKeyId", "yourAccessKeySecret") if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // 填写Bucket名称,例如examplebucket。 bucketName := "examplebucket" data,err := client.GetBucketWebsiteXml(bucketName) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } fmt.Println(data) }
删除镜像回源配置
以下代码用于删除镜像回源配置:
package main import ( "fmt" "os" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // 创建OSSClient实例。 // yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。 // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。 client, err := oss.New("yourEndpoint", "yourAccessKeyId", "yourAccessKeySecret") if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // 填写Bucket名称,例如examplebucket。 bucketName := "examplebucket" // 删除镜像回源配置。 err = client.DeleteBucketWebsite(bucketName) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } }
相关文档
- 关于静态网站托管以及镜像回源的完整示例代码,请参见GitHub示例。
- 关于设置静态网站托管或者镜像回源的API接口说明,请参见PutBucketWebsite。
- 关于获取静态网站托管或者镜像回源的API接口说明,请参见GetBucketWebsite。
- 关于删除静态网站托管或者镜像回源的API接口说明,请参见DeleteBucketWebsite。