镜像回源主要用于数据无缝迁移到 TOS 的场景。例如 Web 服务已经在您自建的源站或者在其他云产品上运行,现需要将服务迁移至 TOS,您可以在迁移过程中使用镜像回源规则获取未迁移至 TOS 的部分数据,可以保证迁移时服务的正常运行。
注意
以下代码用于设置指定桶 examplebucket
的镜像回源规则。
#include "TosClientV2.h" using namespace VolcengineTos; int main(void){ // 初始化 TOS 账号信息 // Your Region 填写 Bucket 所在 Region std::string region = "Your Region"; std::string accessKey = std::getenv("TOS_ACCESS_KEY"); std::string secretKey = std::getenv("TOS_SECRET_KEY"); // 填写 Bucket 名称,例如 examplebucket std::string bucketName = "examplebucket"; // 初始化网络等资源 InitializeClient(); // 创建交互的 client TosClientV2 client(region, accessKey, secretKey); // 设置桶的镜像回源 PutBucketMirrorBackInput input(bucketName); // 设置镜像回源规则 rule1 MirrorBackRule rule1; // 设置镜像回源 Condition: 触发回源规则的错误码,目前只支持 404 auto condition = rule1.getCondition(); condition.setHttpCode(404); rule1.setCondition(condition); // 设置镜像回源 Redirect: auto redirect = Redirect(); // 指定跳转的类型。 redirect.setRedirectType(RedirectType::RedirectMirror); // 指定镜像回源的源站地址。例如https://www.example.com/。 SourceEndpoint endpoint; endpoint.setPrimary({"https://www.example.com/"}); endpoint.setFollower({"https://www.example.com/"}); PublicSource publicSource(endpoint); redirect.setPublicSource(publicSource); // 执行跳转时是否携带请求参数 redirect.setPassQuery(true); // 镜像回源结果是 3XX 时, 是否跳转到 Location 获取数据 redirect.setFollowRedirect(true); // 重定向后是否去配置源站拉取数据 redirect.setFetchSourceOnRedirect(true); // 设置MirrorHeader,表示允许和禁止透传哪些Header到源站 // 是否透传除以下Header之外的其他Header到源站。只有设置RedirectType为Mirror时生效。 MirrorHeader mirrorHeaders; mirrorHeaders.setPassAll(false); // 透传指定的Header到源站。只有设置RedirectType为Mirror时生效。 mirrorHeaders.setPass({"header-1", "header-2"}); // 禁止透传指定的Header到源站。只有设置RedirectType为Mirror时生效。 mirrorHeaders.setRemove({"header-3", "header-4"}); redirect.setMirrorHeader(mirrorHeaders); // 设置镜像回源规则。 std::vector<MirrorBackRule> rules{rule1}; input.setRules(rules); auto output = client.putBucketMirrorBack(input); if (!output.isSuccess()) { // 异常处理 std::cout << "PutBucketMirrorBack failed." << output.error().String() << std::endl; // 释放网络等资源 CloseClient(); return -1; } std::cout << "PutBucketMirrorBack success." << std::endl; // 释放网络等资源 CloseClient(); return 0; }
注意
要获取桶的镜像回源规则,您必须为桶所有者。
以下代码用于获取指定桶 examplebucket
的镜像回源规则。
#include "TosClientV2.h" using namespace VolcengineTos; int main(void){ // 初始化 TOS 账号信息 // Your Region 填写 Bucket 所在 Region std::string region = "Your Region"; std::string accessKey = std::getenv("TOS_ACCESS_KEY"); std::string secretKey = std::getenv("TOS_SECRET_KEY"); // 填写 Bucket 名称,例如 examplebucket std::string bucketName = "examplebucket"; // 初始化网络等资源 InitializeClient(); // 创建交互的 client TosClientV2 client(region, accessKey, secretKey); // 获取桶的镜像回源配置 GetBucketMirrorBackInput input(bucketName); auto output = client.getBucketMirrorBack(input); if (!output.isSuccess()) { // 异常处理 std::cout << "GetBucketMirrorBack failed." << output.error().String() << std::endl; // 释放网络等资源 CloseClient(); return -1; } // 打印桶的镜像回源配置 auto mirrorBackRules= output.result().getRules(); for (auto& rule : mirrorBackRules){ // 打印规则 ID std::cout << "rule:" << rule.getId() << std::endl; // 打印 conditon,查看触发回源规则的错误码,目前只支持 404 auto conditon = rule.getCondition(); std::cout << "http code conditon:" << conditon.getHttpCode() << std::endl; // 打印 redirect,查看回源规则跳转类型、重定向后是否去配置源站拉取数据、执行跳转时是否携带请求参数、镜像回源结果是 3XX 时, 是否跳转到 Location 获取数据 auto redirect = rule.getRedirect(); std::cout << "redirect:" << redirect.getStringFormatRedirectType() << "," << redirect.isFetchSourceOnRedirect() << "," << redirect.isPassQuery() << "," << redirect.isFollowRedirect() << std::endl; // 打印 mirrorHeader,查看是否透传全部 HTTP HEADER 到源端、透传和禁止透传的 HEADER auto mirrorHeader = redirect.getMirrorHeader(); std::cout << "redirect-mirrorHeader:" << mirrorHeader.isPassAll() << std::endl; std::cout << "redirect-mirrorHeader-pass:" << std::endl; for(auto& pass : mirrorHeader.getPass()){ std::cout << pass << std::endl; } std::cout << "redirect-mirrorHeader-remove:" << std::endl; for(auto& remove : mirrorHeader.getRemove()){ std::cout << remove << std::endl; } // 打印可访问的源端地址 auto publicSource = redirect.getPublicSource(); auto sourceEndpoint = publicSource.getSourceEndpoint(); std::cout << "redirect-publicSource-sourceEndpoint:" << std::endl; std::cout << "redirect-publicSource-sourceEndpoint-primary:" << std::endl; for(auto& primary : sourceEndpoint.getPrimary()){ std::cout << primary << std::endl; } std::cout << "redirect-publicSource-sourceEndpoint-follower:" << std::endl; for(auto& follower : sourceEndpoint.getFollower()){ std::cout << follower << std::endl; } } // 释放网络等资源 CloseClient(); return 0; }
注意
要删除桶的镜像回源规则,您必须为桶所有者。
以下代码用于删除指定桶 examplebucket
的镜像回源规则。
#include "TosClientV2.h" using namespace VolcengineTos; int main(void){ // 初始化 TOS 账号信息 // Your Region 填写 Bucket 所在 Region std::string region = "Your Region"; std::string accessKey = std::getenv("TOS_ACCESS_KEY"); std::string secretKey = std::getenv("TOS_SECRET_KEY"); // 填写 Bucket 名称,例如 examplebucket std::string bucketName = "examplebucket"; // 初始化网络等资源 InitializeClient(); // 创建交互的 client TosClientV2 client(region, accessKey, secretKey); // 删除桶的镜像回源配置 DeleteBucketMirrorBackInput input(bucketName); auto output = client.deleteBucketMirrorBack(input); if (!output.isSuccess()) { // 异常处理 std::cout << "DeleteBucketMirrorBack failed." << output.error().String() << std::endl; // 释放网络等资源 CloseClient(); return -1; } std::cout << "DeleteBucketMirrorBack success." << std::endl; // 释放网络等资源 CloseClient(); return 0; }
关于镜像回源的更多信息,请参见设置回源规则。