CDN服务的域名操作和域名配置及刷新预热
引导式阅读
Java
CDN服务的域名操作和域名配置及刷新预热
作者
C***
上架时间
2021-06-24 14:39:32

版本说明

本示例基于华为云SDK V1.0版本开发,高版本示例正在开发中。

功能介绍

CDN(Content Delivery Network,内容分发网络)。CDN是构建在现有互联网基础之上的一层智能虚拟网络,通过在网络各处部署节点服务器,实现将源站内容分发至所有CDN节点,使用户可以就近获得所需的内容。CDN服务缩短了用户查看内容的访问延迟,提高了用户访问网站的响应速度与网站的可用性,解决了网络带宽小、用户访问量大、网点分布不均等问题。

本文档提供了相关API对CDN进行域名操作、域名配置、刷新预热相关操作

应用场景

华为云CDN主要的应用场景包括:

网站加速

适用于有加速需求的网站,包括门户网站、电商平台、资讯APP、 UGC应用( User Generated Content,用户原创内容)等。 CDN网络能够对加速域名下的静态内容在全国范围内提供良好的加速服务。

如图1所示:

文件下载加速

适用于通过http/https提供文件下载业务的网站、下载工具、游戏客户端、 APP商店等,也能为软件实时更新业务进行加速,包括APP更新,手游更新等,减少用户等待时间,提升用户转化率

如图2所示:

点播加速

适用于提供音视频点播服务的客户。例如:在线教育类网站、在线视频分享网站、互联网电视点播平台、音乐视频点播APP等。CDN点播加速、直播加速可以提供快速、稳定和安全的点播加速服务

如图3所示:

全站加速

适用于各行业动静态内容混合,含较多动态资源请求(如asp、jsp、php等格式的文件)的网站。全站加速融合了动态和静态加速,用户请求资源时,静态内容从边缘节点就近获取,动态内容通过动态加速技术智能选择较优路由回源获取。

如图4所示:

准备工作

1.CDN服务软件开发工具包(CDN SDK,Content Delivery Network Software Development Kit)是对CDN服务提供的REST API进行的封装,以简化用户的开发工作。用户直接调用CDN SDK提供的接口函数即可实现使用CDN服务业务能力的目的。相关开发包和参考文档请从华为云CDN开发工具包(SDK)获取。 2.要开通CDN服务,在执行本章操作前,请确认您注册华为云账号并完成实名认证。

调用API说明

CDN提供了REST(Representational State Transfer)风格API,支持您通过HTTPS请求调用,调用方法请参见 如何调用API。 您还可以通过这个视频教程了解如何构造请求调用API,点击查看

同时CDN还提供多种编程语言的SDK供您使用,SDK的使用方法请参见CDN SDK

终端节点

终端节点即调用API的请求地址,CDN部署时不区分物理区域,为全局级服务。因此,CDN的终端节点如表1所示。您也可以从地区和终端节点中查询服务的终端节点。

表1 CDN的终端节点

区域名称 区域 终端节点(Endpoint)
所有 ALL cdn.myhuaweicloud.com

域名操作、域名配置、刷新预热

搭建环境

// step 1: add cloud service override endpoint OverridableEndpointURLResolver endpointResolver = new OverridableEndpointURLResolver(); endpointResolver.addOverrideEndpoint(ServiceType.CDN, "xxx");//example:"https://cdn.myhuaweicloud.com/v1.0" // step 2: initial OpenStack4j Client 初始OpenStack4j客户端 OSFactory.enableHttpLoggingFilter(true); // step 3: config of the client 配置客户端 Config config = Config.newConfig() .withEndpointURLResolver(endpointResolver);

认证鉴权

搭建好环境之后需要去认证鉴权,有如下两种认证方式,您可以选择其中一种进行认证鉴权。 Token认证:通过Token认证通用请求。 AK/SK认证:通过AK(Access Key ID)/SK(Secret Access Key)加密调用请求。推荐使用AK/SK认证,其安全性比Token认证要高。

1.Token认证

Token在计算机系统中代表令牌(临时)的意思,拥有Token就代表拥有某种权限。Token认证就是在调用API的时候将Token加到请求消息头,从而通过身份认证,获得操作API的权限。

URI

POST /v3/auth/tokens

Token可通过调用获取用户Token接口获取,调用本服务API需要全局级别的Token,即调用获取用户Token接口时,请求body中auth.scope的取值需要选择domain,如下所示。

{ "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "name": "username", "password": "********", "domain": { "name": "domainname" } } } }, "scope": { "domain": { "name": "domainname" } } } }

获取Token后,再调用其他接口时,您需要在请求消息头中添加“X-Auth-Token”

代码如下:

String user = "username"; // IAM User Name String password = "password"; // IAM User Password String projectId = "projectId"; // the project ID of cn-north-1 String userDomainId = "userDomainId"; // Account ID String authUrl = "xxxxxxx"; // example: authUrl = "https://iam.myhuaweicloud.com/v3/" OSClient.OSClientV3 osclient = OSFactory.builderV3() .withConfig(config) .endpoint(authUrl) .credentials(user, password, Identifier.byId(userDomainId)) .scopeToDomain(Identifier.byId(userDomainId)) .scopeToProject(Identifier.byId(projectId)) .authenticate();

您还可以通过这个视频教程了解如何使用Token认证:https://bbs.huaweicloud.com/videos/101333 。

2.AK/SK认证

AK/SK认证就是使用AK/SK对请求进行签名,在请求时将签名信息添加到消息头,从而通过身份认证。 AK(Access Key ID):访问密钥ID。与私有访问密钥关联的唯一标识符;访问密钥ID和私有访问密钥一起使用,对请求进行加密签名。 SK(Secret Access Key):与访问密钥ID结合使用的密钥,对请求进行加密签名,可标识发送方,并防止请求被修改。

代码如下:

String ak = "xxxx"; String sk = "xxxx"; String projectId = "xxxx";// the project ID of cn-north-1 String region = "xxxx"; //example: region = "cn-north-1" String cloud = "xxxx"; //example: cloud = "myhuaweicloud.com" OSClient.OSClientAKSK osclient = OSFactory.builderAKSK().withConfig(config).credentials(ak, sk, region, projectId, cloud).authenticate();

您也可以通过这个视频教程了解AK/SK认证的使用:https://bbs.huaweicloud.com/videos/69d4cf0269c34d41ab3dff02c73dd6c9 。

快速入门

此案例通过调用一系列CDN的API来创建加速域名,让您快速入门了解,详情参考

域名操作

查询加速域名

功能介绍

查询加速域名信息。

URI

GET /v1.0/cdn/domains

// get domain list Domain.Domains domains = osclient.cdn().domains().list(params); System.out.println(domains.getList());

创建加速域名

如果您想通过CDN加速指定网站的业务,那么您要将需要加速的网站作为源站,并为其创建加速域名。CDN通过加速域名将源站上需要加速的内容缓存到CDN节点,达到加速访问资源的效果。

功能介绍

创建加速域名。

URI

POST /v1.0/cdn/domains

// create domain Source source = Source.builder().activeStandby(1).ipOrDomain("1.2.3.4").originType("ipaddr").build(); List<Source> sources = new ArrayList<>(); sources.add(source); DomainCreate creation = DomainCreate.builder().businessType("web").domainName("xxxxxxx") .enterpriseProjectId(params.get("enterprise_project_id")) .sources(sources).build(); Domain domainCreate = osclient.cdn().domains().create(creation); System.out.println(domainCreate); System.out.println("domain Create success...");

查询加速域名详情

功能介绍

查询加速域名详情。

URI

GET /v1.0/cdn/domains/{domainId}/detail

// get domain detail Domain domainDetail = osclient.cdn().domains().getDetail(domainId, params); System.out.println(domainDetail); System.out.println("domain getDetail success...");

删除加速域名

功能介绍

删除加速域名。

URI

DELETE /v1.0/cdn/domains/{domainId}

// delete domain:deactivate only, configuration fails, audit failed, and the failed domain name can be deleted Domain domainDelete = osclient.cdn().domains().delete(domainId, params); System.out.println(domainDelete); System.out.println("domain delecte success...");

启用加速域名

功能介绍

启用加速域名。

URI

PUT /v1.0/cdn/domains/{domainId}/enable

// enable domain:domain names that are not blocked and locked can be disabled if they are deactivated or configured to fail Domain domainEnable = osclient.cdn().domains().enable(domainId, params); System.out.println(domainEnable); System.out.println("domain enable success...");

停用加速域名

功能介绍

停用加速域名。

URI

PUT /v1.0/cdn/domains/{domainId}/disable

// disable domain:domain names that are not blocked and locked can be disabled if they are deactivated or configured to fail Domain domainDisable = osclient.cdn().domains().disable(domainId, params); System.out.println(domainDisable); System.out.println("domain disable success...");

域名配置

域名添加完成后,您可以根据业务需求对加速域名进一步自定义配置。自定义配置项包括源站配置、回源配置(回源HOST配置、Range回源配置、302回源跟随配置、OBS私有桶回源配置)、HTTPS配置、缓存配置、访问控制(防盗链配置、IP黑白名单配置)、高级配置(HTTP header配置)。

修改源站信息

源站是您的网站服务器,是CDN加速分发数据的来源。若您的源站信息需要修改(如源站IP,源站域名、OBS桶域名或回源端口),您可以通过CDN服务提供的API修改源站信息。

功能介绍

修改源站信息。源站IP地址或域名都可以指引CDN节点回源到对应的源站服务器,源站域名不能与加速域名相同。

URI

PUT /v1.0/cdn/domains/{domainId}/origin

// set origin Source newSource1 = Source.builder().ipOrDomain("1.2.3.4").originType("ipaddr").activeStandby(1).build(); Source newSource2 = Source.builder().ipOrDomain("example.source.com").originType("domain").activeStandby(0).build(); List<Source> newSources = new ArrayList<>(); newSources.add(newSource1); newSources.add(newSource2); Source.Origin newOrigin = Source.Origin.builder().sources(newSources).build(); Source.Origin origin = osclient.cdn().domains().setOrigin(domainId, newOrigin, params); System.out.println(origin); System.out.println("domain setOrigin success...");

修改回源HOST

回源HOST是CDN回源过程中,在源站访问的站点域名,即HTTP请求头中的HOST信息。配置回源HOST后,CDN在回源过程中会根据HOST信息去对应站点获取资源。 功能介绍

修改回源HOST。回源HOST是CDN节点在回源过程中,在源站访问的站点域名,即http请求头中的host信息。

URI

PUT /v1.0/cdn/domains/{domainId}/originhost

// set originHost OriginHost newOriginHost = OriginHost.builder().customizeDomain("example.host.com").originHostType("customize").build(); OriginHost originHost = osclient.cdn().domains().setOriginHost(domainId, newOriginHost, params); System.out.println(originHost); System.out.println("domain setOriginHost success...");

查询回源HOST

功能介绍

查询回源HOST。回源HOST是CDN节点在回源过程中,在源站访问的站点域名,即http请求头中的host信息。

URI

GET /v1.0/cdn/domains/{domainId}/originhost

// get originHost OriginHost originHosts = osclient.cdn().domains().getOriginHost(domainId, params); System.out.println(originHosts); System.out.println("domain getOriginHost success...");

开启/关闭Range回源

Range回源是指源站在收到CDN节点回源请求时,根据http请求头中的Range信息返回指定范围的数据给CDN节点。 功能介绍

Range回源是指源站在收到CDN节点回源请求时,根据http请求头中的Range信息返回指定范围的数据给CDN节点。

接口约束

开启Range回源前需要确认源站是否支持Range请求,若源站不支持Range请求,开启Range回源将导致资源无法缓存。

URI

PUT /v1.0/cdn/domains/{domainId}/range-switch

// set range OriginRangeStatus rangeStatus = OriginRangeStatus.builder().rangeStatus("on").build(); OriginRange originRange = osclient.cdn().domains().setOriginRange(domainId, rangeStatus); System.out.println(originRange); System.out.println("domain setOriginRange success...");

开启/关闭302回源跟随

开启302回源跟随配置后,当CDN节点回源请求源站返回302状态码时,CDN节点会先跳转到302对应地址获取资源,缓存后再返回给用户。 功能介绍

开启此项配置后,当CDN节点回源请求源站返回302状态码时,CDN节点会先跳转到302对应地址获取资源并缓存后再返回给用户。

URI

PUT /v1.0/cdn/domains/{domainId}/follow302-switch

// set follow 302 Follow302Status f302Status = Follow302Status.builder().follow302Status("off").build(); Follow302 f302 = osclient.cdn().domains().setFollow302(domainId, f302Status); System.out.println(f302); System.out.println("domain setFollow302 success...");

设置Referer过滤规则

配置referer黑白名单,通过设置的过滤策略,对访问者身份进行识别和过滤,实现限制访问来源的目的。 功能介绍

设置Referer过滤规则。通过设置过滤策略,对访问者身份进行识别和过滤,实现限制访问来源的目的。

URI

PUT /v1.0/cdn/domains/{domainId}/referer

// set referer Referer referferNew = Referer.builder().refererList("www.xxx.com;www.xxx2.com").refererType(2) .includeEmpty(true).build(); Referer referer = osclient.cdn().domains().setReferer(domainId, referferNew, params); System.out.println(referer); System.out.println("domain setReferer success...");

查询Referer过滤规则

功能介绍

查询Referer过滤规则。

URI

GET /v1.0/cdn/domains/{domainId}/referer

// get referer Referer referers = osclient.cdn().domains().getReferer(domainId, params); System.out.println(referers); System.out.println("domain getReferer success...");

查询IP黑白名单

功能介绍

查询域名已经设置的IP黑白名单。

URI

GET /v1.0/cdn/domains/{domainId}/ip-acl

// get ip-acl IpAclList ipAcllists = osclient.cdn().domains().getIpAcl(domainId); System.out.println(ipAcllists); System.out.println("domain getIpAcl success...");

设置IP黑白名单

配置IP黑白名单,通过设置过滤策略,对用户请求IP地址进行过滤,从而限制访问来源。 功能介绍

设置域名的IP黑白名单。

URI

PUT /v1.0/cdn/domains/{domainId}/ip-acl

// set ip-acl List<String> newIpAcls = new ArrayList<>(); newIpAcls.add("1.2.3.5"); newIpAcls.add("2.3.4.5"); IpAclList newIpAclList = IpAclList.builder().type(1).ipList(newIpAcls).build(); IpAcl ipAcl = osclient.cdn().domains().setIpAcl(domainId, newIpAclList); System.out.println(ipAcl); System.out.println("domain setIpAcl success...");

设置缓存规则

功能介绍

设置CDN节点上缓存资源的缓存策略。

URI

PUT /v1.0/cdn/domains/{domainId}/cache 您可以配置CDN节点中某个或某些缓存资源的缓存间隔时间规则。达到设置的缓存间隔时间后,当用户向CDN节点请求资源时,CDN会直接回源站拉取对应的最新资源返回给用户,并缓存到CDN节点中。

// set cacheConfig CacheRule rule1 = CacheRule.builder().rule_type(0).ttl(2).ttlType(3).priority(10).build(); CacheRule rule2 = CacheRule.builder().rule_type(1).content(".jpg;.png").ttl(2).ttlType(3).priority(11).build(); List<CacheRule> rules = new ArrayList<>(); rules.add(rule1); rules.add(rule2); CacheConfig newCacheConfig = CacheConfig.builder().ignoreUrlParameter(true).rules(rules).build(); CacheConfig cacheConfig = osclient.cdn().domains().setCacheConfig(domainId, newCacheConfig, params); System.out.println(cacheConfig); System.out.println("domain setCacheConfig success...");

查询缓存规则

功能介绍

查询缓存规则。

URI

GET /v1.0/cdn/domains/{domainId}/cache

// get CacheConfig cacheConfig = osclient.cdn().domains().getCacheConfig(domainId, params); System.out.println(cacheConfig); System.out.println("domain getCacheConfig success...");

配置HTTPS

功能介绍

设置加速域名HTTPS。通过配置加速域名的HTTPS证书,并将其部署在全网CDN节点,实现HTTPS安全加速。

URI

PUT /v1.0/cdn/domains/{domain_id}/https-info 通过配置加速域名的HTTPS证书,并将其部署在全网CDN节点,实现HTTPS安全加速。此项配置非必选配置,如果您需要使用https访问则为必选配置。

// set httpsInfo // https on HttpsInfo newHttpsInfo1 = HttpsInfo.builder().httpsStatus(2) .certName("cdn_test_cert").certificate("xxxxxxx") .privateKey("xxxxxxx").forceRedirectHttps(0).http2(0) .build(); HttpsInfo httpsInfo1 = osclient.cdn().domains().setHttpsInfo(domainId, newHttpsInfo1, params); System.out.println(httpsInfo1); System.out.println("domain setHttpsInfo success..."); // https off HttpsInfo newHttpsInfo2 = HttpsInfo.builder().httpsStatus(0).build(); HttpsInfo httpsInfo2 = osclient.cdn().domains().setHttpsInfo(domainId, newHttpsInfo2, params); System.out.println(httpsInfo2); System.out.println("domain setHttpsInfo success...");

查询HTTPS配置

功能介绍

获取加速域名证书。

URI

GET /v1.0/cdn/domains/{domain_id}/https-info

// get httpsInfo HttpsInfo httpsInfo3 = osclient.cdn().domains().getHttpsInfo(domainId, params); System.out.println(httpsInfo3); System.out.println("domain getHttpsInfo success...");

查询IP归属信息

功能介绍

查询IP归属信息。

URI

GET /v1.0/cdn/ip-info

// get cdn ip-info params.put("ips", "x.x.x.x,x.x.x.x"); CdnIP.CdnIPs cdnips = osclient.cdn().domains().queryCdnIPs(params); System.out.println(cdnips.getList());

新增/修改响应头配置

功能介绍

新增/修改域名响应头配置。

URI

URI格式

PUT /v1.0/cdn/domains/{domainId}/response-header 当您使用HTTP Header 配置功能,用户请求加速域名下的资源时,可以在返回的响应消息中添加您配置的消息头,以实现跨域访问等目的。

// set response header ResponseHeader newResponseHeader = ResponseHeader.builder() .accessControlAllowMethods("GET") .accessControlAllowOrigin("http://www.test.com") .accessControlMaxAge("123") .conteaccessControlExposeHeaders("content-type") .contentLanguage("zh-CN") .contentDisposition("test.xml").build(); ResponseHeader responseHeader1 = osclient.cdn().domains().setResponseHeader(domainId, newResponseHeader); System.out.println(responseHeader1); System.out.println("domain setResponseHeader success...");

查询响应头配置

功能介绍

列举header所有配置。

URI

URI格式

GET /v1.0/cdn/domains/{domainId}/response-header

// get response header ResponseHeader responseHeader2 = osclient.cdn().domains().getResponseHeader(domainId); System.out.println(responseHeader2); System.out.println("domain getResponseHeader success...");

刷新预热

CDN提供资源的缓存刷新和缓存预热功能。

  • 缓存刷新:提交缓存刷新请求后,CDN节点的缓存内容将会被删除,当用户向CDN节点请求资源时,CDN会直接回源站拉取对应的资源。
  • 缓存预热:提交缓存预热请求后,源站将会主动将对应的资源缓存到CDN节点,用户就能直接从CDN节点获取到最新的资源。

创建刷新缓存任务

功能介绍

创建刷新缓存任务。

URI

POST /v1.0/cdn/refreshtasks

// create refreshTask List<String> refreshTaskUrls = new ArrayList<>(); refreshTaskUrls.add("http://example.domain.com/web"); refreshTaskUrls.add("http://example.domain.com/index.html"); RefreshTaskCreate refreshTaskCreate = RefreshTaskCreate.builder().type("file").urls(refreshTaskUrls).build(); RefreshTask refreshTask = osclient.cdn().domains().createRefreshTask(refreshTaskCreate, params); System.out.println(refreshTask); System.out.println("CreateRefreshTask success...");

创建预热缓存任务

功能介绍

创建预热任务。

URI

POST /v1.0/cdn/preheatingtasks

// create preheatingTask List<String> urls = new ArrayList<>(); urls.add("http://example.domain.com/test.jpg"); urls.add("http://example.domain.com/test/di.png"); PreheatingTaskCreate preheatingTaskCreation = PreheatingTaskCreate.builder().urls(urls).build(); PreheatingTask preheatingTask = osclient.cdn().domains().createPreheatingTask(preheatingTaskCreation, params); System.out.println(preheatingTask); System.out.println("CreatePreheatingTask success...");

查询预热缓存任务

功能介绍

查询刷新预热任务。

URI

GET /v1.0/cdn/historytasks

// query historyTasks Task.Tasks tasks = osclient.cdn().domains().queryTasks(params); System.out.println(tasks.getList()); System.out.println("QueryHistoryTasks success...");

查询刷新预热任务详情

功能介绍

查询3天内的刷新预热任务详情。

URI

GET /v1.0/cdn/historytasks/{historyTasksId}/detail

// query historyTasksDetail String taskId = "8888888"; TaskDetail taskDetail = osclient.cdn().domains().getTaskDetail(taskId, params); System.out.println(taskDetail); System.out.println("QueryTaskDetail success...");

参考

API更多信息请参考API概览