本文介绍几种特殊场景下的镜像回源规则配置。

示例一

客户A在华东1(杭州)有名为examplebucketA的Bucket,需实现如下场景:
  • 当请求者访问examplefolder目录中不存在的文件时,可以从https://example.com站点的destfolder目录中回源文件。
  • 源站中存在部分文件名以正斜线(/)开头的文件,这部分文件要正确回源到examplebucketA中。
  • 需要检查回源文件的MD5值,MD5值不匹配的文件不在examplebucketA中保存。

要满足以上场景需求,请按如下步骤配置镜像回源规则:

  1. 登录OSS管理控制台
  2. 单击Bucket列表,然后单击目标Bucket名称。
  3. 单击Bucket列表,之后单击目标Bucket名称。
  4. 单击基础设置 > 镜像回源
  5. 单击设置,然后单击创建规则
  6. 创建规则面板配置,按如下说明配置必要的参数:
    参数 配置
    回源类型 选中镜像
    回源条件 选中文件名前缀,并设置为examplefolder/
    是否替换或截取前缀 选中是否替换或截取前缀,并设置为destfolder/
    回源地址 第一列设置为https,第二列设置为example.com,第三列置空。
    透传/到源站 选中是否透传/到源站

    回源文件的文件名以正斜线(/)开头时,OSS会删除正斜线(/)后将文件保存到Bucket中。

    说明 此功能已在美国(硅谷)、美国(弗吉尼亚)和华东1(杭州)地域公测,您可以提交工单申请试用。
    检查MD5 选中是否检查MD5

    当回源请求中返回的response包含Content-MD5字段时,OSS会检查回源文件的MD5值与Content-MD5字段值是否匹配。

    • 匹配:客户端将获取文件,且OSS保存回源文件。
    • 不匹配:由于计算MD5需要完整的文件数据,而此时文件已经透传回客户端,所以客户端能获取到文件,但OSS不会保存回源文件。
    以上规则配置完成后访问流程如下:
    1. 请求者首次访问https://examplebucketA.oss-cn-hangzhou.aliyuncs.com///examplefolder/example.txt
    2. 如果examplebucketA中不存在//examplefolder/example.txt文件,则OSS向https://example.com///destfolder/example.txt请求文件。
    3. 获取到目标文件后,OSS进行以下操作:
      • 如果回源请求中返回的response包含Content-MD5字段,OSS会计算回源文件的MD5值,并与Content-MD5字段进行匹配。MD5匹配通过则将文件重命名为examplefolder/example.txt后保存到examplebucketA,并将文件返回给请求者;匹配不通过时仅返回文件给用户,不保存该文件到examplebucketA。
      • 如果回源请求中返回的response不包含Content-MD5字段,OSS将文件重命名为examplefolder/example.txt后保存到examplebucketA,并将文件返回给请求者。

示例二

客户B有华北2(北京)名为examplebucketB的Bucket和源站A(https://example.com)、源站B(https://example.org)两个目录一致的站点,需实现如下场景:
  • 当请求者访问pathA/example目录中不存在的文件时,从https://example.com站点的example目录中获取。
  • 当请求者访问pathB/example目录中不存在的文件时,从https://example.org站点的example目录中获取。
  • 两个源站针对某些文件还设置了重定向策略,需要跟随重定向获取最终数据保存到exampleBucketB中。

要满足以上场景需求,请参照示例一中的操作指引配置以下两条镜像回源规则:

  • 规则一:
    参数 配置
    回源类型 选中镜像
    回源条件 选中文件名前缀,并设置为A/example/
    是否替换或截取前缀 选中是否替换或截取前缀,并设置为example/
    回源地址 第一列设置为https,第二列设置为example.com,第三列置空。
    3xx请求响应策略 选中跟随源站重定向请求
    说明 未选中跟随源站重定向请求时,OSS会直接将源站重定向规则指定的地址返回给请求者。
  • 规则二:
    参数 配置
    回源类型 选中镜像
    回源条件 选中文件名前缀,并设置为B/example/
    是否替换或截取前缀 选中是否替换或截取前缀,并设置为example/
    回源地址 第一列设置为https,第二列设置为example.org,第三列置空。
    3xx请求响应策略 选中跟随源站重定向请求

以上规则配置完成后访问流程如下:

  1. 请求者首次访问https://examplebucketB.oss-cn-beijing.aliyuncs.com/A/example/example.txt
  2. 如果examplebucketA中不存在A/example/example.txt文件,则OSS向https://example.com/example/example.txt请求文件。
  3. 根据源站是否设置重定向规则,请求结果如下:
    • 如果源站A针对example/example.txt设置了重定向规则,则OSS会向源站重定向规则指定的地址重新发起请求,获取到文件后会将文件命名为A/example/example.txt保存至examplebucketA,并返回给请求者。
    • 如果源站A未针对example/example.txt设置重定向规则,则OSS获取到文件后会将文件命名为A/example/example.txt保存至examplebucketA,并返回给请求者。

如果请求者访问https://examplebucketB.oss-cn-beijing.aliyuncs.com/B/example/example.txt,则通过回源规则获取的文件存储在examplebucketB的B/example目录。

示例三

客户C在华东2(上海)地域有名为examplebucketC和examplebucketD的两个Bucket。其中examplebucketC为公共读,examplebucketD为私有,需实现如下场景:
  • 当请求者examplebucketC根目录下examplefolder目录中不存在的文件时,可以从examplebucketD的examplefolder目录中获取目标文件。
  • 允许将请求URL中携带的query string传递到源站。
  • 允许将请求URL中携带的header1header2header3三个HTTP header传递到源站。

要满足以上场景需求,请参照示例一中的操作指引配置以下镜像回源规则:

参数 配置
回源类型 选中镜像
回源条件 选中文件名前缀,并设置为examplefolder/
源站类型 选中回源OSS私有Bucket,并在回源Bucket下拉列表选择examplebucketD
说明 配置源站类型时,OSS会在RAM服务中生成AliyunOSSMirrorDefaultRole角色,并授予该角色只读访问所有Bucket的权限(AliyunOSSReadOnlyAccess)。
回源地址 第一列设置为https,其他置空。
回源参数 选中携带请求字符串

OSS会将URL请求中的query string 传递到源站。

设置HTTP header传递规则 选中传递指定HTTP header参数,并添加header1header2header3三个HTTP header。

回源规则不支持传递部分标准HTTP header,例如authorizationauthorization2rangecontent-lengthdate等,以及以x-oss-oss-x-drs-开头的HTTP header。

以上规则配置完成后访问流程如下:
  1. 请求者首次访问https://examplebucketC.oss-cn-shanghai.aliyuncs.com/examplefolder/example.png?caller=lucas&production=oss
  2. 如果examplebucketC中不存在examplefolder/example.png文件,则OSS会向https://examplebucketD.oss-cn-shanghai.aliyuncs.com/examplefolder/example.png?caller=lucas&production=oss请求文件。
  3. examplebucketD会根据传递的?caller=lucas&production=oss参数统计访问信息,并将example.png返回给OSS。
  4. OSS会将获取的文件命名为examplefolder/example.png,并将命名后的文件存储至examplebucketC。

如果请求中还携带了header1header2header3的HTTP header时,也会被传递到examplebucketD。

示例四

客户A在华东1(杭州)有名为examplebucketA的Bucket,并且对Bucket配置了https://example.com/error.html的默认404页。需要满足以下场景:

  • 当请求者访问该Bucket下examplefolder目录中不存在的文件时,指定从https://example.com站点的destfolder目录中回源文件。
  • 如果从指定回源地址中请求该文件仍不存在时,会返回默认404页。但是,现在请求者希望OSS透传源站返回的指定状态码以及Body。

要满足以上场景需求,请参照示例一中的操作指引配置以下镜像回源规则:

参数 配置
回源类型 选中镜像
回源条件 选中文件名前缀,并设置为examplefolder/
回源地址 第一列设置为https,第二列设置为www.example.com,第三列设置为destfolder
透传源站 选中设置指定状态码,并指定状态码为4xx5xx
说明 通过控制台最多可指定状态码的数量是15个。如需设置更多状态码,请使用SDK或者ossutil工具。

以上规则配置完成后,当OSS回源请求的结果为透传源站指定的状态码4xx和5xx时,OSS会直接向客户端透传源站返回的状态码和Body,已设置的默认404页无效。