腾讯云CDN对接使用全攻略:从开通到生产级配置
1. CDN的基本原理与适用场景
内容分发网络(Content Delivery Network,CDN)的核心思路是将源站上的静态资源缓存到分布在全国或全球各地的边缘节点上。当用户发起访问请求时,CDN会根据用户的地理位置将请求调度到最近的边缘节点。如果该节点已经缓存了目标资源,则直接返回给用户;如果尚未缓存,节点会回源站拉取资源,缓存后再返回给用户。这种机制有效缩短了网络传输距离,显著提升了资源的加载速度,同时大幅降低了源站的带宽压力。
CDN尤其适合图片、CSS样式表、JavaScript脚本、字体文件、安装包、音视频文件等静态资源的加速分发。对于前端项目,构建后的静态文件可以存放在对象存储COS中,再通过CDN加速访问。但对于频繁变化的动态接口,需要谨慎配置缓存规则,避免用户拿到过期数据。
需要先登录腾讯云控制台,点击:腾讯云控制台,还没有账号,点击:注册后再关联,已有账号点击:登录后再关联
2. 开通CDN服务与准备工作
在使用腾讯云CDN之前,需要完成以下准备工作:
- 注册腾讯云账号并完成实名认证
- 进入CDN控制台,勾选同意服务条款后,单击"免费开通"即可开通CDN/ECDN服务
- 准备一个已经完成备案的域名(如果加速区域选择中国境内或全球)。如果仅加速中国境外区域,域名可以不需要备案
- 准备一个可访问的源站,可以是云服务器CVM、对象存储COS,也可以是第三方对象存储
腾讯云CDN支持中国境内、中国境外和全球三个加速区域。不同加速区域的计费策略不同,且如果加速区域为全球,可以在域名配置中为境内和境外分别设置独立的区域源站。需要特别注意的是,如果加速区域为中国境内但源站位于中国香港或其他境外区域,跨境回源可能导致回源失败或速度变慢。
3. 添加加速域名
开通CDN服务后,第一步是添加加速域名:
- 登录CDN控制台
- 单击左侧菜单内的"域名管理",进入域名管理列表
- 单击"添加域名",添加一个新域名
- 配置加速域名基础信息
3.1 加速区域选择
根据需求选择合适的加速区域:
- 中国境内:所有用户均使用腾讯云中国境内节点就近提供加速服务;选择该加速区域时,加速域名需为已备案域名
- 中国境外:所有用户均使用腾讯云中国境外节点就近提供加速服务,包括中国香港、中国澳门、中国台湾等地区;选择该区域时,对加速域名备案不作要求
- 全球:所有用户均由腾讯云全球节点提供就近服务;选择该加速区域时,加速域名需为已备案域名
3.2 域名格式要求
加速域名长度不超过81字符。支持接入域名为example.com、a.b.example.com等形式域名,单域名接入后,当前加速配置仅针对该域名生效。例如接入域名为example.com,用户仅访问example.com有加速效果,若访问www.example.com或m.example.com则没有加速效果,需要单独接入CDN加速后生效。支持含下划线的域名或中文域名转punycode码接入,中文域名需先以中文形式备案。支持接入*.example.com、*.a.example.com等形式的泛域名。
3.3 源站配置
配置业务源站相关信息,CDN节点在缓存无资源时,会回源站拉取并缓存。源站类型可以选择IP、源站域名或对象存储COS源。如果选择COS作为源站,需要在域名配置中的源站类型中选择"COS源(即对象存储)"。根据源站支持情况,选择回源请求协议。在源站地址中选择对应的存储桶。如果开启私有存储桶访问,需前往COS存储桶权限管理先对CDN服务授权。
输入添加域名页面所有配置后,单击"确认添加"完成添加域名操作,请耐心等待域名配置下发至全网节点,下发时间约5-10分钟。
4. 配置CNAME解析
添加域名成功后,在域名管理页面,可以查看到CDN为您的域名分配的加速CNAME。您需要前往接入域名的DNS服务商处,为此域名添加该CNAME记录,待DNS配置生效后,即可进行加速服务。配置CNAME记录的操作方法是在域名服务商控制台添加CNAME记录,例如:cdn.example.com CNAME cdn.qcloud.com。
如果接入域名的CDN加速服务未生效,最常见的原因是没有在域名DNS服务商处配置CNAME记录。
5. 节点缓存过期配置
CDN缓存资源为触发式,当用户发起针对某资源的访问,若请求触达的CDN节点未缓存该资源,则回用户源站拉取资源,成功拉取到资源(2XX状态码)后,在节点进行缓存并返回给用户。每一个CDN节点上的缓存资源都有"过期时间"的概念,若请求到的缓存资源已到期,即便节点仍有缓存,也会判定为无效,进行再次回源拉取。
5.1 缓存规则类型
CDN支持以下四种类型的节点缓存过期规则:
- 文件类型:根据填入的文件后缀进行缓存过期时间设置,格式为文件类型形式,如jpg;css,不同后缀之间用;间隔
- 文件夹:根据填入的目录路径进行缓存过期时间设置,格式为/test形式,无需以/结尾,不同目录之间用;间隔
- 全路径文件:指定完整的文件路径进行缓存过期时间设置,格式为/index.html,支持完整路径加文件类型匹配模式,如/test/*.jpg
- 首页:针对根目录设置缓存过期时间
5.2 缓存策略建议
对于图片、字体、CSS、JS等版本化资源,可以设置较长缓存时间。例如文件名中包含hash的资源,一般不会被覆盖更新,可以缓存较长时间。对于HTML文件,建议缓存时间短一些,或者根据发布策略进行刷新,因为HTML通常负责引用最新的静态资源,如果缓存过久,用户可能无法及时看到新版本页面。对于不希望缓存的内容,可以设置不缓存规则。
一个常见的缓存策略示例:
*.js、*.css、*.png、*.jpg → 缓存7天或更久
*.html → 缓存较短时间
接口请求 → 不缓存单个域名至多可添加100条缓存规则,多条规则支持调整优先级,底部优先级大于顶部。缓存时间最大可设365天。
6. HTTPS配置
腾讯云CDN支持HTTPS加速服务,您可以通过上传证书进行部署,也可以将已经托管至腾讯云SSL证书管理的证书,直接部署至CDN平台,启用HTTPS加速服务,实现全网数据加密传输。腾讯云CDN目前已经全面支持HTTPS配置。
6.1 配置步骤
登录CDN控制台,在左侧菜单栏选择域名管理,单击域名操作列的管理,进入域名配置页面,切换至HTTPS配置。确认是否开启HTTPS服务,开启后CDN域名加速产生的HTTPS请求数将独立计费。单击"配置证书"按钮,新增一个域名证书。
新增证书有两种方式:
- 新上传证书:需要您手动上传该证书的证书内容及私钥内容,证书内容需要为PEM格式
- 已托管证书:可选择您已托管在SSL证书服务内的证书文件,根据当前您配置的域名,已托管证书只显示符合当前域名的证书文件
腾讯云CDN现已支持ECC证书部署。证书配置成功后,您可以在该域名的HTTPS配置页面查看该证书的状态及到期时间。file.myqcloud.com后缀为腾讯云对象存储默认加速域名,无需配置证书可直接进行HTTPS加速。
7. 安全防护配置
7.1 Referer防盗链
若您希望对业务资源的访问来源进行控制,腾讯云CDN为您提供了referer防盗链配置功能。通过对用户HTTP Request Header中referer字段的值设置访问控制策略,从而限制访问来源,避免恶意用户盗刷。
防盗链支持两种类型:
- 黑名单:若请求的referer字段匹配黑名单内设置的内容,CDN节点拒绝返回该请求信息,直接返回403状态码
- 白名单:若请求的referer字段匹配白名单设置的内容,则CDN节点正常返回请求信息
防盗链支持域名/IP规则,匹配方式为前缀匹配。防盗链支持通配符匹配,例如名单为*.qq.com,则www.qq.com、a.qq.com均会匹配。若加速域名服务区域为全球加速,可以针对境内、境外加速区域进行不同的referer防盗链配置。
7.2 时间戳鉴权
除了referer黑白名单、IP黑白名单等访问控制策略外,也可以通过设置高级时间戳鉴权来进行盗刷防护。配置时间戳防盗链后,客户端在发起请求时需要按照配置计算签名并携带至服务端,CDN节点进行服务端校验,校验通过后才继续放行。
CDN提供了四种鉴权签名计算方式(TypeA、TypeB、TypeC、TypeD)供您选择。以Python Demo为例的TypeA鉴权计算方式:
import time
import hashlib
def generate_type_a_url(path, ts, rand_str, key):
# Type A: sign = md5(path - ts - rand_str - 0 - key)
sign = hashlib.md5(('%s-%s-%s-%s-%s' % (path, ts, rand_str, 0, key)).encode()).hexdigest()
return '%s?sign=%s' % (path, sign)8. 高级配置
8.1 缓存预热
腾讯云CDN提供资源预热功能,无需用户请求触发,通过在CDN控制台提交资源列表,将指定资源加载至加速节点。预热一般适用于资源发生变更需要即时同步或一些重大活动发布。配置完成后,为COS下的资源文件做好预热,可以提前将静态资源预热至CDN加速节点,降低源站压力,提高响应与下载速度。
8.2 缓存刷新
使用CDN后,资源更新并不一定会立即对所有用户生效,因为节点上可能还保留旧缓存。因此,发布新版本时建议采用文件名hash,例如:app.a8f31c.js、style.9d21ab.css。这样每次构建后文件名都会变化,用户会直接请求新资源,避免旧缓存问题。如果某些资源必须使用固定路径,则需要在发布后执行CDN缓存刷新,让节点主动删除旧文件。
8.3 带宽封顶
CDN提供带宽封顶功能,在5分钟时间内会自动统计带宽使用情况,如达到封顶阈值,则根据配置,CDN会进行不同的响应。封顶配置支持瞬时用量封顶(流量/带宽/HTTPS请求数)和累计用量封顶(流量/HTTPS请求数)。流量封顶即统计域名的流量消耗,流量阈值为用户访问该域名的流量上限值。带宽封顶即统计域名的带宽消耗。
8.4 IP访问限频
腾讯云CDN提供了IP访问限频配置,通过对单IP单节点在每一秒钟的访问次数进行限制,可进行高频CC攻击抵御、防恶意用户盗刷等。
8.5 多源站与热备源站
若您的主源站为自有源站,可添加热备源站,所有回源请求均会先访问主源站,若返回为4XX、5XX错误码,或连接超时、协议不兼容等情况后,会再次回源至热备源站进行资源拉取,保障用户回源高可用。对于全球加速域名,还可以为境内和境外分别配置独立的区域源站。
8.6 回源跟随301/302
通过开启回源跟随301/302配置,CDN节点在回源时遭遇301/302时会主动跟随跳转,直至获取所需资源(最多可跟随3次),返回实际的资源给到用户端,用户端无需跳转。默认情况下为关闭状态。开启后最多仅跟随3次跳转,超出限制则会直接返回301/302给客户。
9. API调用与SDK示例
腾讯云CDN提供了完善的API接口,支持通过API进行域名管理、缓存配置、流量调度、数据监控等操作。API Explorer提供了在线调用、签名验证、SDK代码生成和快速检索接口等能力。用户可通过API Inspector查看控制台每一步操作关联的API调用情况,并自动生成各语言版本的API代码。
9.1 Python SDK安装
pip install tencentcloud-sdk-python-common
pip install tencentcloud-sdk-python-cdn9.2 Python SDK调用示例
以下示例演示如何通过Python SDK查询CDN域名列表:
import json
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.cdn.v20180606 import cdn_client, models
# 建议使用子账号密钥 + 环境变量的方式调用SDK,提高SDK使用的安全性
secret_id = "您的SecretId"
secret_key = "您的SecretKey"
cred = credential.Credential(secret_id, secret_key)
httpProfile = HttpProfile()
httpProfile.endpoint = "cdn.tencentcloudapi.com"
clientProfile = ClientProfile()
clientProfile.httpProfile = httpProfile
client = cdn_client.CdnClient(cred, "", clientProfile)
# 查询域名列表
req = models.DescribeDomainsRequest()
params = {
"Limit": 10,
"Offset": 0
}
req.from_json_string(json.dumps(params))
resp = client.DescribeDomains(req)
print(resp.to_json_string())建议用户使用子账号密钥 + 环境变量的方式调用SDK,提高SDK使用的安全性。为子账号授权时,请遵循最小权限指引原则。
10. 实时日志与监控
腾讯云CDN实时日志服务通过对CDN访问日志的实时采集与推送,实现对日志数据的快速检索与分析。您可通过CDN控制台一站式快捷接入,享受从日志采集、日志存储到日志检索等全方位稳定可靠的日志服务。
通过CDN访问日志的分析,可以挖掘大量有用信息用于CDN质量和性能分析、错误诊断、客户端分布分析和用户行为分析。您还可以配置异常监控告警,基于CDN访问日志实时监控CDN访问流量异常。
在CDN控制台的插件中心,可以开通性能监测服务,通过汇总分析、页面分析等分析页面性能和前端质量,并针对关键指标配置告警。
11. 计费方式与成本优化
11.1 计费方式
腾讯云CDN计费分为基础服务计费和增值服务计费。基础服务计费指使用CDN产生的下行流量或者带宽费用。基础服务计费分两个不同的计费区域:中国境内和中国境外。目前默认提供按流量小时计费方式。
按流量计费的客户可预先购买流量包用以抵扣后续将产生的流量费用。仅计费方式为流量计费时,CDN流量包才能正常抵扣。计费方式为带宽计费时,流量包将无法正常抵扣。CDN流量包不支持跨计费区域抵扣。按流量小时计费不支持变更计费方式到按带宽峰值结算。
11.2 成本优化建议
- 根据业务流量特征选择合适的计费方式:流量波动较大的业务适合按流量计费,流量稳定且峰值较高的业务适合按带宽计费
- 提前购买区域流量包以降低单位流量成本
- 合理配置缓存规则,提高缓存命中率,减少回源流量
- 利用缓存预热功能在业务高峰前将热点资源提前缓存到节点
- 关注CDN统计分析中的流量命中率指标
12. 常见问题排查
12.1 接入CDN后网站打不开
请先检查接入域名的CDN状态是否为"已关闭",若为"已关闭"状态则对应网页无法打开。若非"已关闭"状态时,检查是否已在域名DNS服务商处配置了CNAME记录。
12.2 加速效果不明显
可能原因包括:缓存命中率低、网络状况不佳或配置不当。检查缓存策略,确保常用资源被正确缓存。对于首次访问的资源进行URL预热,或者调整缓存过期时间配置以减少回源次数。
12.3 不同节点缓存内容不一致
确保源站根据URL参数吐出不同的资源和CDN域名配置的缓存键规则不同时使用。确保源站同一个URL的资源更新以后统一做刷新处理。
12.4 域名备案问题
工信部域名备案到腾讯云备案库同步有一定的延迟,一般需要1-2个小时左右。若已完成备案仍遇到未备案提示,建议在1-2个小时后再重试添加域名。
问答环节
问1:腾讯云CDN支持哪些加速区域?
答:腾讯云CDN支持中国境内、中国境外和全球三个加速区域。选择中国境内或全球加速时,加速域名需要已完成工信部备案;仅加速中国境外时,域名可以不需要备案。
问2:添加加速域名后需要多长时间才能生效?
答:添加域名后,域名配置下发至全网节点约需5-10分钟。此外,还需要在DNS服务商处配置CNAME记录,DNS解析生效时间取决于DNS服务商的TTL设置。
问3:如何配置CDN缓存规则?
答:在CDN控制台的域名管理页面,进入具体域名的配置页面,切换至"缓存配置"标签页,即可配置节点缓存过期规则。支持按文件类型、文件夹、全路径文件和首页四种方式设置缓存时间。
问4:CDN如何防止资源被盗链?
答:腾讯云CDN提供了referer防盗链和时间戳鉴权两种主要方式。referer防盗链通过黑白名单控制访问来源;时间戳鉴权要求客户端在请求时携带计算好的签名,CDN节点校验通过后才放行。
问5:CDN的计费方式有哪些?
答:腾讯云CDN基础服务计费分为按流量计费和按带宽计费两种方式。目前默认提供按流量小时计费。按流量计费的客户可预先购买流量包抵扣后续费用。计费区域分为中国境内和中国境外两个大区。
问6:资源更新后如何让用户立即看到最新内容?
答:推荐采用文件名hash的方式,每次构建后文件名变化,用户直接请求新资源。如果必须使用固定路径,则需要在发布后执行CDN缓存刷新操作。也可以在CDN控制台的"缓存刷新"功能中提交URL或目录刷新任务。




