文档中心 CDN Pro REST API加速

REST API加速

更新时间:2022-07-18 19:42:53

在CDN Pro上加速一个REST API

API 调用请求通常是动态 HTTP 请求,因为响应结果是由服务器根据请求中的一些参数来实时生成的。正如我们在常见问题FAQ中提到的,CDN Pro 可以非常有效地加速 REST API 调用等动态请求。例如,移动APP 或 Web 应用程序的用户可能会在短时间内重复加载同一页面,从而产生大量重复的 API 调用请求。如果使用CDN进行缓存,可以显着提高请求性能。本文将以一个简单的例子,为您介绍如何通过CDN Pro控制台创建加速项目并加速 API 服务。

假设您需要加速的API具备如下特性:

  • API 服务域名是:api.company.com , 从API服务器获取资源,需要在请求 Host 头中携带该域名,以访问指定的API内容。
  • 当前 API 域名设置的 DNS 解析是通过A记录指定到2个服务器 IP 地址: 1.1.1.1 1.1.1.2
  • API 服务使用了标准的 HTTP 请求方法:GETPOSTPUTDELETEPATCH
  • 客户端按照基本身份验证(HTTP Basic authentication)的格式要求,通过HTTP请求标头 Authorization 将用户身份凭据传递给 API 服务器。(若HTTP请求遵循了基本身份认证规则,则 CDN Pro 服务器可以从请求中提取用户名并放到内置变量 $remote_user 中,您可以通过该变量获取用户信息。请注意,您不必完全按照基本身份验证的base64算法,采用明文形式传递用户秘钥,您可以使用更复杂的算法来传递秘钥,例如像CDN Pro API的算法一样, 生成一个签名放在冒号后面。)
  • 访问API 服务的所有输入参数都通过请求查询参数(query string)指定。

使用 CDN Pro 加速此 API 服务:

  • 创建新的API服务域名 api-origin.company.com ,并配置 DNS 解析,通过A记录指定到2个服务器 IP 地址: 1.1.1.1 1.1.1.2 。CDN Pro 服务器将使用这个新的API服务域名作为回源地址来请求API资源。原有的API服务域名 api.company.com 的A记录解析将不能再使用,因为我们稍后会对其添加一条CNAME记录解析到 CDN Pro 边缘调度域名,以将客户端的流量引导到要CDN Pro加速平台。

以体系化安全护航企业发展!网宿安全技术交流会圆满举行

  • 我们认为,任何API服务都应该采用TLS加密保护。因此,您需要将一本授权给 api.company.com 域名的TLS证书上传到CDN Pro 平台,以开启TLS加密传输保护。我们建议使用 Let’s Encrypt自动更新证书。

以体系化安全护航企业发展!网宿安全技术交流会圆满举行

  • 创建一个加速项目来加速这个 API 服务。输入要加速的 API 域名: api.company.com

以体系化安全护航企业发展!网宿安全技术交流会圆满举行

  • 输入回源信息。此处需要注意的是:①服务器:源站服务器配置的是我们刚刚新创建的API服务域名 api-origin.company.com 。CDN Pro回源访问该域名,会通过该域名的DNS解析找到对应的服务器IP 1.1.1.1 1.1.1.2 ;②支持协议:我们配置了回源强制转 HTTPS 协议,以确保数据传输安全;③Host请求头 Host 标头设置为源站服务器所需的值 api.company.com 。在此场景下,我们实际上也可以不配置这个HOST值,因为该值默认为空的时候,CDN Pro 将直接把客户端携带的 Host 请求标头值传递给源站服务器;④直接连接:我们还选择了“直连”的方式,由CDN Pro边缘节点直接回源,而不通过父缓存,以此最大限度地减少延迟,同时确保不会在不同类型的节点服务器上命中缓存。

以体系化安全护航企业发展!网宿安全技术交流会圆满举行
以体系化安全护航企业发展!网宿安全技术交流会圆满举行

  • 在边缘逻辑中输入以下代码。此处需要注意的是:①API 用户名和客户端 IP 被添加到了缓存键中,以确保同一IP同一用户仅会在CDN Pro上命中唯一的缓存内容;②强制请求走HTTPS,同时仅缓存1分钟的短暂缓存时间,这对于大多数应用程序来说已足够安全;③默认情况下,仅对 GET 请求方法的响应进行缓存。您也可以使用 proxy_cache_methods 指令来对其他请求方法的响应进行缓存。④需要注意的另一件事是,我们允许客户端使用 Cache-Control: no-cache 标头字段来绕过缓存。当 CDN Pro 服务器接受到的请求携带了这个字段值时,不会在节点服务器上进行缓存查询,而是直接回源站服务器获取内容;⑤最后,我们通过指令 origin_fast_route 开启了快速路由功能,以确保以最稳定的链路高效回源。
location / { #This is the default location.
  # reject http
  if ($request_scheme = http) {
    return 400 "please use https!";
  }
  origin_pass api-origin; #the request URI and query string will be passed to the origin
  # add API user name and client IP into cache key
  set $cache_misc $cache_misc.$remote_user.$client_real_ip;
  # add sorted query string into cache key
  set $cache_misc $cache_misc.$sorted_querystring_args;
  # the client can use Cache-Control: no-cache to by pass cache
  if ($http_cache_control ~ (no-cache|no-store)) {
    set $bypass_cache 1;     #do not use cached copy
  }
  proxy_cache_bypass $bypass_cache;
  proxy_cache_valid 1m; #200, 301, and 302 responses will be cached for 1m
  origin_fast_route on; #enable the Fast Route to origin
}

以体系化安全护航企业发展!网宿安全技术交流会圆满举行

  • 为加速项目配置TLS证书。您可以根据您的安全要求配置 TLS 最低协议版本、TLS 最高协议版本以及TLS加密套件:

以体系化安全护航企业发展!网宿安全技术交流会圆满举行

现在,任何访问 api.company.com 域名的请求都将被路由到 CDN Pro 平台。每个未命中的缓存(不缓存/缓存过期)都将直接被转发到API的源站服务器,以验证用户凭据并获取最新内容。相同用户相同IP对 API 发起请求,在CDN Pro缓存未过期之前均会命中缓存,立即由 CDN Pro 服务器提供API响应服务,与直接回源获取内容相比,大大地缩短了请求周转时间。访问API的最终用户将获得更好的性能体验,同时,源服务器不必在短时间内重复生成相同的内容,减少了源站服务器的压力。在高频API调用的场景下,这种性能提升效果会更加显著!

本篇文档内容对您是否有帮助?
有帮助
我要反馈
提交成功!非常感谢您的反馈,我们会继续努力做到更好!