您可以将存储空间(Bucket)设置为静态网站托管模式并设置镜像回源的跳转规则(RoutingRule)。静态网站托管模式配置生效后,访问网站相当于访问Bucket,并且能够自动跳转至指定的索引页面和错误页面。镜像回源的跳转规则配置生效后,可用于数据无缝迁移到OSS的场景。
注意事项
本文示例代码以华东1(杭州)的地域ID
cn-hangzhou
为例,默认使用外网Endpoint,如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的Region与Endpoint的对应关系,请参见OSS地域和访问域名。本文以从环境变量读取访问凭证为例。如何配置访问凭证,请参见配置访问凭证。
要设置静态网站托管或者镜像回源,您必须有
oss:PutBucketWebsite
权限;要获取静态网站托管或者镜像回源,您必须有oss:GetBucketWebsite
权限;要删除静态网站托管或者镜像回源,您必须有oss:DeleteBucketWebsite
权限。具体操作,请参见为RAM用户授权自定义的权限策略。
静态网站托管
静态网站是指所有的网页都由静态内容构成,包括客户端执行的脚本(例如JavaScript)。您可以通过静态网站托管功能将您的静态网站托管到Bucket,并使用Bucket的访问域名访问这个网站。
设置静态网站托管
以下代码用于设置静态网站托管:
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// 定义全局变量
var (
region string // 存储区域
bucketName string // 存储空间名称
)
// init函数用于初始化命令行参数
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}
func main() {
// 解析命令行参数
flag.Parse()
// 检查bucket名称是否为空
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// 检查region是否为空
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 创建设置存储空间静态网站托管的请求
request := &oss.PutBucketWebsiteRequest{
Bucket: oss.Ptr(bucketName), // 存储空间名称
WebsiteConfiguration: &oss.WebsiteConfiguration{
IndexDocument: &oss.IndexDocument{
Suffix: oss.Ptr("index.html"), // 设置静态网站托管的默认主页为index.html
SupportSubDir: oss.Ptr(true), // 设置支持子目录
Type: oss.Ptr(int64(0)), // 类型(0表示静态网站)
},
ErrorDocument: &oss.ErrorDocument{
Key: oss.Ptr("error.html"), // 设置静态网站托管的错误页面为error.html
HttpStatus: oss.Ptr(int64(404)), // HTTP状态码
},
},
}
// 执行设置存储空间静态网站托管的请求
result, err := client.PutBucketWebsite(context.TODO(), request)
if err != nil {
log.Fatalf("failed to put bucket website %v", err)
}
// 打印设置存储空间静态网站托管的结果
log.Printf("put bucket website result:%#v\n", result)
}
查看静态网站托管配置
以下代码用于查看静态网站托管配置:
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// 定义全局变量
var (
region string // 存储区域
bucketName string // 存储空间名称
)
// init函数用于初始化命令行参数
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}
func main() {
// 解析命令行参数
flag.Parse()
// 检查bucket名称是否为空
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// 检查region是否为空
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 创建获取存储空间静态网站配置的请求
request := &oss.GetBucketWebsiteRequest{
Bucket: oss.Ptr(bucketName), // 存储空间名称
}
// 执行获取存储空间静态网站配置的操作并处理结果
result, err := client.GetBucketWebsite(context.TODO(), request)
if err != nil {
log.Fatalf("failed to get bucket website %v", err)
}
// 打印获取存储空间静态网站配置的结果
log.Printf("get bucket website result:%#v\n", result)
}
删除静态网站托管配置
以下代码用于删除静态网站托管配置:
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// 定义全局变量
var (
region string // 存储区域
bucketName string // 存储空间名称
)
// init函数用于初始化命令行参数
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}
func main() {
// 解析命令行参数
flag.Parse()
// 检查bucket名称是否为空
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// 检查region是否为空
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 创建删除存储空间静态网站托管配置的请求
request := &oss.DeleteBucketWebsiteRequest{
Bucket: oss.Ptr(bucketName),
}
// 执行删除存储空间静态网站托管配置的操作并处理结果
result, err := client.DeleteBucketWebsite(context.TODO(), request)
if err != nil {
log.Fatalf("failed to delete bucket website %v", err)
}
// 打印删除存储空间静态网站托管配置的结果
log.Printf("delete bucket website result:%#v\n", result)
}
镜像回源
镜像回源主要用于数据无缝迁移到OSS的场景。例如某服务已经在用户建立的源站或者在其他云产品上运行,现因业务发展,需要将服务迁移至OSS,迁移时需保证服务的正常运行。您可以在迁移过程中使用镜像回源规则获取未迁移至OSS的部分数据,保证服务的正常运行。
设置镜像回源
例如,当请求者访问目标Bucket中不存在的文件时,可以通过指定回源条件和回源地址,从源站中获取目标文件。例如您在华东1(杭州)有名为examplebucket的Bucket,您希望请求者访问Bucket根目录下examplefolder目录中不存在的文件时,可以从www.example.com站点的examplefolder目录获取目标文件。
以下代码用于设置符合上述场景的镜像回源规则:
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// 定义全局变量
var (
region string // 存储区域
bucketName string // 存储空间名称
)
// init函数用于初始化命令行参数
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}
func main() {
// 解析命令行参数
flag.Parse()
// 检查bucket名称是否为空
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// 检查region是否为空
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 设置镜像回源规则
ruleOk := oss.RoutingRule{
RuleNumber: oss.Ptr(int64(1)),
Condition: &oss.RoutingRuleCondition{
KeyPrefixEquals: oss.Ptr("myobject"), // 指定匹配对象前缀
HttpErrorCodeReturnedEquals: oss.Ptr(int64(404)), // 指定回源条件为HTTP状态码404
},
Redirect: &oss.RoutingRuleRedirect{
RedirectType: oss.Ptr("Mirror"), // 指定重定向类型为镜像
MirrorURL: oss.Ptr("http://www.test.com/"), // 指定回源地址
MirrorHeaders: &oss.MirrorHeaders{
//PassAll: oss.Ptr(true), // 指定传递所有头部
Passs: []string{"myheader-key1", "myheader-key2"}, // 允许传递指定HTTP Header参数
Removes: []string{"myheader-key3", "myheader-key4"}, // 禁止传递指定HTTP Header参数
Sets: []oss.MirrorHeadersSet{
{
Key: oss.Ptr("myheader-key5"), // 设置指定HTTP Header参数的名称
Value: oss.Ptr("myheader-value"), // 设置指定HTTP Header参数的值
},
},
},
},
}
// 创建设置镜像回源的请求
request := &oss.PutBucketWebsiteRequest{
Bucket: oss.Ptr(bucketName), // 存储空间名称
WebsiteConfiguration: &oss.WebsiteConfiguration{
IndexDocument: &oss.IndexDocument{
Suffix: oss.Ptr("index.html"), //设置镜像回源的默认页面为index.html
SupportSubDir: oss.Ptr(true),
Type: oss.Ptr(int64(0)),
},
ErrorDocument: &oss.ErrorDocument{
Key: oss.Ptr("error.html"), // 设置镜像回源的错误页面为error.html
HttpStatus: oss.Ptr(int64(404)),
},
RoutingRules: &oss.RoutingRules{
RoutingRules: []oss.RoutingRule{
ruleOk,
},
},
},
}
// 执行设置镜像回源的请求
result, err := client.PutBucketWebsite(context.TODO(), request)
if err != nil {
log.Fatalf("failed to put bucket website %v", err)
}
// 打印设置镜像回源的结果
log.Printf("put bucket website result:%#v\n", result)
}
获取镜像回源配置
以下代码用于获取镜像回源配置:
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// 定义全局变量
var (
region string // 存储区域
bucketName string // 存储空间名称
)
// init函数用于初始化命令行参数
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}
func main() {
// 解析命令行参数
flag.Parse()
// 检查bucket名称是否为空
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// 检查region是否为空
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 创建获取镜像回源配置的请求
request := &oss.GetBucketWebsiteRequest{
Bucket: oss.Ptr(bucketName), // 存储空间名称
}
// 执行获取镜像回源配置的操作并处理结果
result, err := client.GetBucketWebsite(context.TODO(), request)
if err != nil {
log.Fatalf("failed to get bucket website %v", err)
}
// 打印获取镜像回源配置的结果
log.Printf("get bucket website result:%#v\n", result.WebsiteConfiguration.RoutingRules)
}
删除镜像回源配置
以下代码用于删除镜像回源配置:
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// 定义全局变量
var (
region string // 存储区域
bucketName string // 存储空间名称
)
// init函数用于初始化命令行参数
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}
func main() {
// 解析命令行参数
flag.Parse()
// 检查bucket名称是否为空
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// 检查region是否为空
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 创建删除镜像回源配置的请求
request := &oss.DeleteBucketWebsiteRequest{
Bucket: oss.Ptr(bucketName),
}
// 执行删除镜像回源配置的操作并处理结果
result, err := client.DeleteBucketWebsite(context.TODO(), request)
if err != nil {
log.Fatalf("failed to delete bucket website %v", err)
}
// 打印删除镜像回源配置的结果
log.Printf("delete bucket website result:%#v\n", result)
}
相关文档
关于静态网站托管以及镜像回源的完整示例代码,请参见put_bucket_website.go, get_bucket_website.go和delete_bucket_website.go。
关于设置静态网站托管或者镜像回源的API接口说明,请参见PutBucketWebsite。
关于获取静态网站托管或者镜像回源的API接口说明,请参见GetBucketWebsite。
关于删除静态网站托管或者镜像回源的API接口说明,请参见DeleteBucketWebsite。