文档首页/ 对象存储服务 OBS/ API参考/ 桶API/ 镜像回源/ 设置镜像回源规则-PutMirrorBackToSource
更新时间:2026-04-15 GMT+08:00
分享

设置镜像回源规则-PutMirrorBackToSource

功能介绍

OBS提供数据回源功能,可以在被请求的数据不存在时,通过回源规则从源站获取对应数据。可通过本接口为指定桶设置镜像回源规则。了解更多镜像回源相关信息,请参见使用镜像回源获取源站数据

接口约束

表1 约束与限制

限制分类

说明

桶版本限制

仅桶版本号为3.0及以上的桶支持镜像回源。

时间限制

修改镜像回源规则,需要5分钟之后才能生效。

规则数量限制

最多创建10条镜像数据回源规则。

功能限制

  • 不支持给并行文件系统配置镜像回源规则。
  • 不支持OBS静态网站,即通过OBS静态网站域名下载对象出现404,不会触发镜像回源规则。
  • 不支持在镜像回源规则中指定当前OBS桶域名,即源桶与目标桶不能是同一个桶。
  • 私有桶的镜像回源当前仅支持部分云厂商。
  • 设置回源策略时,不支持两个桶相互配置为回源桶,即A桶配置回源桶为B桶时,不支持再配置B桶的回源桶为A桶。
  • 不支持源站使用Transfer-Encoding: chunked方式传输数据,即从源站下载对象的响应中必须包含Content-Length头域来指明源对象大小,使用Transfer-Encoding: chunked方式会导致回源失败。

    此种场景在数据回源中的配置方式为:创建/编辑数据回源规则 > HTTP header传递规则 > 允许传递所有参数 > 打开“禁止传递指定参数”开关 > 输入“Accept-Encoding”。

  • 如果同时配置了CDN加速域名和镜像回源规则,且CDN侧开启了Range回源,则需要源站至少返回Etag和Last-Modified两个Header的其中一个,否则可能会导致请求中断。
  • 如果回源源站中使用Nginx反向代理源站,请关闭Nginx的chunked_transfer_encoding配置项:
    location / {
         chunked_transfer_encoding off;
    }

权限限制

  • 需要使用IAM的角色与策略授权功能,增加Tenant Administrator权限后才能设置、获取和删除镜像回源规则。
  • 镜像回源需使用IAM的角色与策略授权功能,创建云服务委托,委托OBS获取源站数据。委托需要给OBS服务授予obs:object:PutObject、obs:object:GetObject、obs:bucket:ListBucket、obs:object:AbortMultipartUpload权限。
  • 如果桶开启了SSE-KMS服务端加密功能,对OBS的云服务委托中还需要使用IAM的角色与策略授权功能,配置kms:cmk:get、kms:cmk:list、kms:cmk:create、kms:dek:create、kms:dek:crypto权限。

其他限制

  • 镜像回源暂时不收费。
  • 不允许多条镜像回源规则配置的文件名前缀存在相互包含或重叠的关系,即对同一个对象的请求不能同时匹配两条镜像回源规则。
  • 针对镜像回源配置未遵循RFC Range Requests标准的源站,客户在使用分段(Range)回源时,HTTP请求需携带Range头域并检查Range头域取值的有效性。

    Range头域指定回源获取的内容范围,取值不能超过文件大小。例如,对大小为1024字节的对象做分段回源,可以指定回源前512字节(Range值为0~511),Range值有效。指定回源2048个字节(Range值为0~2048),超过对象大小,Range值无效,回源失败。

授权信息

您必须是桶拥有者或者拥有Tenant Administrator权限,才能调用本接口。配置Tenant Administrator权限,需要使用角色与策略授权(旧版IAM,即IAM v3接口),授权操作请参考使用IAM授权

请求消息样式

PUT /?mirrorBackToSource HTTP/1.1
Host: bucketname.obs.cn-north-4.myhuaweicloud.com 
Authorization: authorization
Content-Type: application/json
Content-Length: length
Date: date

policy json body

URI参数(URI Parameters)

该请求消息中不使用消息参数。

请求头参数(Request headers)

该请求使用公共请求头,具体参见表3

请求体参数(Request body)

表2 请求体参数

参数名称

是否必选

参数类型

描述

rules

Container

参数解释:

策略规则数组。rules是id、 condition、redirect的父节点。

约束限制:

同一个桶下的不同策略前缀不能重复和起始包含,委托建议使用同一个。

取值范围:

因为每个桶最多创建10条镜像数据回源规则,所以数组长度的取值范围是[1,10]。具体请详见rules参数说明

默认取值:

不涉及

表3 rules参数说明

参数名称

是否必选

参数类型

描述

id

String

参数解释:

设置镜像回源规则的ID。当前桶上配置的镜像回源规则的唯一标识。

约束限制:

该规则ID为桶内唯一,不能与桶内其他策略重复。

取值范围:

长度为1~256的字符串,并且字符只能是大写字母、小写字母、数字、下划线(_)或连字符(-)。

默认取值:

不涉及

condition

Container

参数解释:

触发回源功能的条件。condition是httpErrorCodeReturnedEquals、objectKeyPrefixEquals的父节点。

约束限制:

不涉及

取值范围:

请详见表4

默认取值:

不涉及

redirect

Container

参数解释:

实现回源功能的相关参数。redirect是agency、publicSource、retryConditions、passQueryString、mirrorFollowRedirect、replaceKeyWith、replaceKeyPrefixWith、vpcEndpointURN、redirectWithoutReferer、mirrorAllowHttpMethod的父节点。

约束限制:

不涉及

取值范围:

请详见表5

默认取值:

不涉及

表4 condition参数说明

参数名称

是否必选

参数类型

描述

httpErrorCodeReturnedEquals

Integer

参数解释:

触发回源功能的错误码。当下载请求返回此错误码时,会触发回源功能。

约束限制:

不涉及

取值范围:

404:指对象在OBS桶中不存在。

默认取值:

404

objectKeyPrefixEquals

String

参数解释:

触发回源功能的对象名前缀。当触发回源的请求里对象名满足此前缀,才会继续执行回源功能。

约束限制:

  • 当前缀配置为空时,默认所有对象都匹配。
  • 同一个桶上多条规则的前缀之间不允许重复和起始包含。

取值范围:

长度为0~1023的字符串,值允许为任意字符。

默认取值:

不涉及

表5 redirect参数说明

参数名称

是否必选

参数类型

描述

agency

String

参数解释:

委托名。客户通过委托赋予OBS服务“查询用户桶内指定对象是否存在”以及“向用户桶内上传对象”的权限。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

publicSource

Container

参数解释:

公共可访问的源端配置。当源端为公共可访问的资源时,必选。publicSource是sourceEndpoint的父节点。

约束限制:

不涉及

取值范围:

请详见publicSource参数说明

默认取值:

不涉及

retryConditions

Array

参数解释:

回源地址切换的条件。

约束限制:

4XX和4开头的具体错误码不能同时配置,5XX和5开头的错误码不能同时配置。

取值范围:

最大支持同时配置20个错误码,如4XX,5XX以及400~499,500~599等具体错误码。

默认取值:

不涉及

passQueryString

Boolean

参数解释:

是否携带请求字符串。

约束限制:

如果取值为true,但query参数里有签名信息,则将签名信息去掉,再传递剩余参数。

取值范围:

  • false:不会将OBS请求中的queryString传递到源站。
  • true:会将OBS请求中的queryString传递到源站。

默认取值:

false

mirrorFollowRedirect

Boolean

参数解释:

是否跟随源站3xx重定向请求获取到资源。

约束限制:

不涉及

取值范围:

  • false:OBS会透传3XX响应,不获取资源。
  • true:跟随源站3XX重定向请求获取到资源。

默认取值:

false

mirrorHttpHeader

Container

参数解释:

HTTP header传递规则。mirrorHttpHeader是passAll、pass、remove、set的父节点。

约束限制:

不涉及

取值范围:

请详见mirrorHttpHeader参数说明

默认取值:

不涉及

replaceKeyWith

String

参数解释:

去源端下载对象的时候是否添加前后缀。

约束限制:

如果replaceKeyWith和ReplaceKeyPrefixWith同时为空,则ReplaceKeyPrefixWith生效。同时非空为非法请求。

取值范围:

  • prefix${key}suffix:需要添加前缀或后缀。
  • ${key}:不需要增加前缀或后缀。

${key}为关键字,prefix为要添加的前缀,suffix为要添加的后缀。同时prefix和suffix的总长度为[0, 1023]。

默认取值:

不涉及

replaceKeyPrefixWith

String

参数解释:

替换前缀objectKeyPrefixEquals的字符串。如果去源端下载对象时,需要替换当前的对象名前缀,则修改此项配置。

约束限制:

如果replaceKeyWith和ReplaceKeyPrefixWith同时为空,则ReplaceKeyPrefixWith生效。同时非空为非法请求。

取值范围:

长度为0~1023的字符串。

默认取值:

不涉及

vpcEndpointURN

String

参数解释:

终端节点服务的URN。

约束限制:

不涉及

取值范围:

长度为0~127的字符串。

默认取值:

不涉及

redirectWithoutReferer

Boolean

参数解释:

是否将原host作为referer头域携带到重定向的目的地址去。

约束限制:

不涉及

取值范围:

false:将原host作为referer头域携带到重定向的目的地址去。

true:不会将原host作为referer头域携带到重定向的目的地址去。

默认取值:

false

mirrorAllowHttpMethod

Array

参数解释:

支持透传的请求方法。

约束限制:

不涉及

取值范围:

  • GET:请求获取桶内对象。
  • HEAD:请求获取桶内对象的元数据信息。

默认取值:

不涉及

表6 publicSource参数说明

参数名称

是否必选

参数类型

描述

sourceEndpoint

Container

参数解释:

公共可访问的源端地址。sourceEndpoint是master、slave的父节点。

约束限制:

不涉及

取值范围:

请详见sourceEndpoint参数说明

默认取值:

不涉及

表7 sourceEndpoint参数说明

参数名称

是否必选

参数类型

描述

master

Array

参数解释:

主源端地址。如果源端为HTTP公共可访问的桶,则此地址为桶域名地址。如果源端为其他云厂商的私有桶,则此地址为区域域名地址。

约束限制:

回源时会优先使用主源站地址,如果同时配置1~5个主地址,会轮询访问所有主地址。如果配置2个及以上主地址,第一次请求主地址失败,并且满足重试条件时,会选用另一个主地址重试一次。

取值范围:

单个源站地址的格式为https://xxx.yyy.zzz或http://xxx.yyy.zzz,长度为10~255的字符串。

默认取值:

不涉及

slave

Array

参数解释:

备源端地址。如果源端为HTTP公共可访问的桶,则此地址为桶域名地址。如果源端为其他云厂商的私有桶,则此地址为区域域名地址。

约束限制:

主地址回源失败时,会选用一个备地址进行重试。最多同时配置5个备地址。

取值范围:

单个源站地址的格式为https://xxx.yyy.zzz或http://xxx.yyy.zzz,长度为10~255的字符串。

默认取值:

不涉及

表8 mirrorHttpHeader参数说明

参数名称

是否必选

参数类型

描述

passAll

Boolean

参数解释:

是否透传全部HTTP header到源端。

约束限制:

  • passAll与pass互斥。
  • 以下HTTP header类型不支持透传:
    1. 以下前缀开头的header:
      1. x-obs-
      2. x-amz-
    2. 所有标准HTTP header,例如:
      1. Content-Length
      2. Authorization
      3. Date

取值范围:

  • false:不透传全部HTTP header到源端
  • true:透传全部HTTP header到源端

默认取值:

false

pass

Array

参数解释:

指定透传的HTTP header列表。

约束限制:

取值仅支持由大小写字母、数字、中划线、下划线组成。

取值范围:

最多展示10个HTTP header,每个HTTP header的长度范围是[1, 63]。

默认取值:

不涉及

remove

Array

参数解释:

不允许透传的HTTP header列表。

约束限制:

  • remove优先级高于pass和passAll。
  • 取值仅支持由大小写字母、数字、中划线、下划线组成。

取值范围:

最多展示10个HTTP header,每个HTTP header的长度范围是[1, 63]。

默认取值:

不涉及

set

Array

参数解释:

设置透传的HTTP header值列表。

约束限制:

  • set优先级高于remove,pass和passAll。
  • 如果自定义头域中包含了Referer头域,必须将redirectWithoutReferer设置为true,否则会被覆盖。

取值范围:

set最多展示10个HTTP header,每个HTTP header包含一个key和一个value。key和value的具体介绍请参见set参数说明

默认取值:

不涉及

表9 set参数说明

参数名称

是否必选

参数类型

描述

key

String

参数解释:

设置需要透传HTTP header的关键字。

约束限制:

  • 多条key之间不允许重复。
  • 取值仅支持由大小写字母、数字、中划线、下划线组成。

取值范围:

长度为1~63的字符串。

默认取值:

不涉及

value

String

参数解释:

设置需要透传HTTP header的值。

约束限制:

不涉及

取值范围:

长度为1~2048的字符串。

默认取值:

不涉及

响应消息样式

HTTP/1.1 status
Server: OBS
Date: date
Content-Length: length

响应头 (Response Headers)

该请求的响应消息使用公共响应头,具体请参考表1

响应体 (Response Body)

该请求的响应消息中不带消息元素。

错误响应消息

无特殊错误,所有错误已经包含在表2OEF错误码中。

请求示例

PUT /?mirrorBackToSource HTTP/1.1
Host: bucketname.obs.cn-north-4.myhuaweicloud.com 
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:sc2PM13Wlfcoc/YZLK0MwsI2Zpo=
Content-Type: application/json
Content-Length: 1049
Date: Tue, 21 Jul 2020 15:38:30 GMT

{
    "rules": [{
        "id": "abc123",
        "condition": {
            "httpErrorCodeReturnedEquals": "404",
            "objectKeyPrefixEquals": "video/"
        },
        "redirect": {
            "agency": "agency",
            "publicSource": {
                "sourceEndpoint": {
                    "master":["http://bucket1.xxx.yyy.com", "https://bucket2.xxx.yyy.com"],
                    "slave": ["http://bucket3.xxx.yyy.com", "https://bucket4.xxx.yyy.com"]
                }
            },
            "retryConditions": ["4XX", "5XX"],
            "passQueryString": true,
            "mirrorFollowRedirect": true,
            "redirectWithoutReferer": true,
            "mirrorAllowHttpMethod":["HEAD"],
            "mirrorHttpHeader": {
                "passAll": false,
                "pass": ["content-encoding"],
                "remove": ["content-type"],
                "set": [{
                    "key": "helloworld",
                    "value": "2222"
                }]
            },
            "replaceKeyWith": "prefix${key}suffix",
            "replaceKeyPrefixWith": "picture/",
            "vpcEndpointURN": "001"
        }
    }]
}

响应示例

HTTP/1.1 201 Created
Server: OBS
Date: Tue, 07 Jul 2020 07:29:13 GMT
Content-Length: 0

相关文档

相关文档