您可以将存储空间(Bucket)设置为静态网站托管模式并设置镜像回源的跳转规则(RoutingRule)。静态网站托管模式配置生效后,访问网站相当于访问Bucket,并且能够自动跳转至指定的索引页面和错误页面。镜像回源的跳转规则配置生效后,可用于数据无缝迁移到OSS的场景。
注意事项
本文以华东1(杭州)外网Endpoint为例。如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的Region与Endpoint的对应关系,请参见OSS地域和访问域名。
本文以从环境变量读取访问凭证为例。如何配置访问凭证,请参见配置访问凭证。
本文以OSS域名新建OSSClient为例。如果您希望通过自定义域名、STS等方式新建OSSClient,请参见初始化。
要设置静态网站托管或者镜像回源,您必须有
oss:PutBucketWebsite
权限;要获取静态网站托管或者镜像回源,您必须有oss:GetBucketWebsite
权限;要删除静态网站托管或者镜像回源,您必须有oss:DeleteBucketWebsite
权限。具体操作,请参见为RAM用户授权自定义的权限策略。
静态网站托管
设置静态网站托管
以下代码用于设置静态网站托管:
#-*-coding:utf-8-*- import oss2 from oss2.models import BucketWebsite from oss2.credentials import EnvironmentVariableCredentialsProvider # 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。 endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # 填写Endpoint对应的Region信息,例如cn-hangzhou。注意,v4签名下,必须填写该参数 region = "cn-hangzhou" # examplebucket填写存储空间名称。 bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region) # 开启静态网站托管模式,并将默认首页设置为index.html,默认404页设置为error.html。 bucket.put_bucket_website(BucketWebsite('index.html', 'error.html'))
查看静态网站托管配置
以下代码用于查看静态网站托管配置:
#-*-coding:utf-8-*- import oss2 from oss2.models import BucketWebsite from oss2.credentials import EnvironmentVariableCredentialsProvider # 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。 endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # 填写Endpoint对应的Region信息,例如cn-hangzhou。注意,v4签名下,必须填写该参数 region = "cn-hangzhou" # examplebucket填写存储空间名称。 bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region) try: # 如果指定的Bucket未开启静态网站托管模式,则调用get_bucket_website时会抛出NoSuchWebsite异常。 website = bucket.get_bucket_website() print('Index file is {0}, error file is {1}'.format(website.index_file, website.error_file)) except oss2.exceptions.NoSuchWebsite as e: print('Website is not configured, request_id={0}'.format(e.request_id))
删除静态网站托管配置
以下代码用于删除静态网站托管配置:
#-*-coding:utf-8-*- import oss2 from oss2.models import BucketWebsite from oss2.credentials import EnvironmentVariableCredentialsProvider # 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。 endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # 填写Endpoint对应的Region信息,例如cn-hangzhou。注意,v4签名下,必须填写该参数 region = "cn-hangzhou" # examplebucket填写存储空间名称。 bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region) # 删除静态网站托管配置。 bucket.delete_bucket_website()
镜像回源
镜像回源主要用于数据无缝迁移到OSS的场景。例如某服务已经在用户建立的源站或者在其他云产品上运行,现因业务发展,需要将服务迁移至OSS,迁移时需保证服务的正常运行。您可以在迁移过程中使用镜像回源规则获取未迁移至OSS的部分数据,保证服务的正常运行。
设置镜像回源
例如,当请求者访问目标Bucket中不存在的文件时,可以通过指定回源条件和回源地址,从源站中获取目标文件。例如您在华东1(杭州)有名为examplebucket的Bucket,您希望请求者访问Bucket根目录下examplefolder目录中不存在的文件时,可以从https://www.example.com/站点的examplefolder目录获取目标文件。
以下代码用于设置符合上述场景的镜像回源规则:
#-*-coding:utf-8-*- import oss2 from oss2.models import BucketWebsite, MirrorHeadersSet, RedirectMirrorHeaders, Redirect, RoutingRule, \ REDIRECT_TYPE_MIRROR, Condition from oss2.credentials import EnvironmentVariableCredentialsProvider # 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。 endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # 填写Endpoint对应的Region信息,例如cn-hangzhou。注意,v4签名下,必须填写该参数 region = "cn-hangzhou" # examplebucket填写存储空间名称。 bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region) # 开启静态网站托管模式,并将默认首页设置为index.html,默认404页设置为error.html。 index_file = 'index.html' error_file = 'error.html' # 设置匹配的条件。 condition1 = Condition(key_prefix_equals='examplefolder', http_err_code_return_equals=404) # 指定镜像回源时携带的Header。 mirror_headers_set_1 = MirrorHeadersSet("myheader-key5", "myheader-value5") mirror_headers_set_2 = MirrorHeadersSet("myheader-key6", "myheader-value6") set_list = [mirror_headers_set_1, mirror_headers_set_2] pass_list = ['myheader-key1', 'myheader-key2'] remove_list = ['myheader-key3', 'myheader-key4'] mirror_header = RedirectMirrorHeaders(pass_all=True, pass_list=pass_list, remove_list=remove_list, set_list=set_list) # 指定匹配此规则后执行的动作。 redirect1 = Redirect(redirect_type=REDIRECT_TYPE_MIRROR, mirror_url='https://www.example.com/', mirror_pass_query_string=True, mirror_follow_redirect=True, mirror_check_md5=True, mirror_headers=mirror_header) rule1 = RoutingRule(rule_num=1, condition=condition1, redirect=redirect1) website_set = BucketWebsite(index_file, error_file, [rule1]) # 设置镜像回源。 bucket.put_bucket_website(website_set)
获取镜像回源配置
以下代码用于获取镜像回源配置:
#-*-coding:utf-8-*- import oss2 from oss2.models import BucketWebsite, MirrorHeadersSet, RedirectMirrorHeaders, Redirect, RoutingRule, \ REDIRECT_TYPE_MIRROR, Condition from oss2.credentials import EnvironmentVariableCredentialsProvider # 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。 endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # 填写Endpoint对应的Region信息,例如cn-hangzhou。注意,v4签名下,必须填写该参数 region = "cn-hangzhou" # examplebucket填写存储空间名称。 bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region) try: # 如果指定的Bucket未开启静态网站托管模式,则调用get_bucket_website时会抛出NoSuchWebsite异常。 website_get = bucket.get_bucket_website() # 获取默认首页。 print(website_get.index_file) # 获取默认404页。 print(website_get.error_file) for rule in website_get.rules: print(rule.rule_num) # 获取规则匹配的前缀。 print(rule.condition.key_prefix_equals) # 获取HTTP状态码。 print(rule.condition.http_err_code_return_equals) # 获取跳转的类型。 print(rule.redirect.redirect_type) # 获取镜像回源的源站地址。 print(rule.redirect.mirror_url) # 获取携带的请求参数。 print(rule.redirect.pass_query_string) # 获取Redirect时Object名称通过ReplaceKeyWith指定的替换值,ReplaceKeyWith支持变量。 # print(rule.redirect.replace_key_with) # 获取Redirect时Object名称的前缀替换值。如果前缀为空,则将这个字符串插入Object名称的前面。 # print(rule.redirect.replace_key_prefix_with) # 获取跳转时的协议。 # print(rule.redirect.proto) # 获取跳转时的域名。 # print(rule.redirect.host_name) # 获取跳转时返回的状态码。 # print(rule.redirect.http_redirect_code) except oss2.exceptions.NoSuchWebsite as e: print('Website is not configured, request_id={0}'.format(e.request_id))
删除镜像回源配置
以下代码用于删除镜像回源配置:
#-*-coding:utf-8-*- import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider # 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。 endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # 填写Endpoint对应的Region信息,例如cn-hangzhou。注意,v4签名下,必须填写该参数 region = "cn-hangzhou" # examplebucket填写存储空间名称。 bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region) # 删除镜像回源配置。 bucket.delete_bucket_website()
相关文档
关于设置静态网站或者镜像回源的API接口说明,请参见PutBucketWebsite。
关于获取静态网站或者镜像回源的API接口说明,请参见GetBucketWebsite。
关于删除静态网站或者镜像回源的API接口说明,请参见DeleteBucketWebsite。