腾讯云CDN对接使用全攻略:从开通到生产级配置与API自动化运维
1. CDN的基本原理与适用场景
内容分发网络(Content Delivery Network,CDN)的核心思路是将源站上的静态资源缓存到分布在全国或全球各地的边缘节点上。当用户发起访问请求时,CDN会根据用户的地理位置将请求调度到最近的边缘节点。如果该节点已经缓存了目标资源,则直接返回给用户;如果尚未缓存,节点会回源站拉取资源,缓存后再返回给用户。这种机制有效缩短了网络传输距离,显著提升了资源的加载速度,同时大幅降低了源站的带宽压力。
CDN尤其适合图片、CSS样式表、JavaScript脚本、字体文件、安装包、音视频文件等静态资源的加速分发。对于前端项目,构建后的静态文件可以存放在对象存储COS中,再通过CDN加速访问。但对于频繁变化的动态接口,需要谨慎配置缓存规则,避免用户拿到过期数据。
需要先登录腾讯云控制台,点击:腾讯云控制台,还没有账号,点击:注册后再关联,已有账号点击:登录后再关联
2. 开通CDN服务与准备工作
在使用腾讯云CDN之前,需要完成以下准备工作:
- 注册腾讯云账号并完成实名认证:这是使用所有腾讯云服务的前提。
- 开通CDN服务:进入CDN控制台,勾选同意服务条款后,单击“免费开通”即可开通CDN/ECDN服务。目前默认提供按流量小时计费方式。
- 准备一个已备案的域名:如果加速区域选择中国境内或全球,域名需要在工信部完成备案。如果仅加速中国境外区域,域名可以不需要备案。域名备案同步有一定延迟,预计需1至2个小时,请在备案完成后等待1至2个小时后再重试添加域名。
- 准备一个可访问的源站:源站可以是云服务器CVM、对象存储COS,也可以是第三方对象存储(如阿里云OSS或AWS S3)。
腾讯云CDN支持中国境内、中国境外和全球三个加速区域。不同加速区域的计费策略不同,且如果加速区域为全球,可以在域名配置中为境内和境外分别设置独立的区域源站。需要特别注意的是,如果加速区域为中国境内但源站位于中国香港或其他境外区域,跨境回源可能导致回源失败或速度变慢。
3. 添加加速域名
完成准备工作后,即可在CDN控制台添加加速域名:
- 登录CDN控制台,单击左侧菜单内的“域名管理”,进入域名管理列表。
- 单击“添加域名”,进入域名配置页面。
- 配置加速域名基础信息:
- 加速区域:根据业务需求选择中国境内、中国境外或全球。中国境内和全球加速要求域名已备案。
- 加速域名:支持接入example.com、a.b.example.com等形式域名,也支持含下划线的域名或中文域名转punycode码接入。域名长度不超过81字符。支持接入*.example.com、*.a.example.com等形式的泛域名,接入泛域名后暂不支持其子域名或二级泛域名在其他账号中接入。
- 所属项目:项目为腾讯云所有云产品共享资源集概念,用于资源分组管理。
- 加速类型:腾讯云CDN针对不同业务类型进行了针对性的加速性能优化。CDN适用于静态资源加速,包括网页小文件(电商、网站、UGC社区)、下载大文件(游戏安装包、应用更新)和音视频点播等场景。ECDN适用于动静加速或动态加速场景,如网站首页、账号登录、订单交易、API调用等。加速类型选定后不支持修改,如需更换需删除域名后重新添加。
- IPv6访问:可选择仅支持IPv4或同时支持IPv4+IPv6。
- 配置源站信息:
- 源站类型:可选择自有源站(填写源站IP)、COS源(选择对应的存储桶)或第三方对象存储。
- 回源请求协议:根据源站支持情况选择HTTP或HTTPS。
- 源站地址:根据源站类型填写对应的IP地址、域名或选择存储桶。
- 私有存储桶访问:如果源站为私有COS存储桶,需前往COS存储桶权限管理先对CDN服务授权,确认授权后可手动开启。
- 单击“确认添加”,等待域名配置下发至全网节点,下发时间约5至10分钟。
4. 配置CNAME解析
添加域名成功后,CDN会为您的域名分配一个专属的CNAME地址(通常以.dnsv1.com作为后缀)。您需要前往域名DNS服务商处配置CNAME记录,将业务域名指向CDN提供的CNAME地址,才能使CDN加速生效。
4.1 一键配置(域名托管在DNSPod)
如果您的域名已托管于腾讯云DNSPod内,且当前账号有该域名的解析权限,可以在添加完域名后使用一键配置完成CNAME配置。腾讯云CDN将默认为您在DNSPod内针对该域名增加一条CNAME解析记录值,TTL默认值为600秒。配置完成后可单击“验证CNAME状态”查看是否已生效。
4.2 手动配置
如果域名不在DNSPod,需手动配置CNAME:
- 在CDN控制台的域名管理列表中,复制对应域名的CNAME值。
- 前往域名DNS服务商的控制台,找到对应的域名,单击解析。
- 添加一条CNAME记录,主机记录填写加速域名的前缀(如加速域名为www.example.com,主机记录填写www),记录值填写复制的CNAME值。
注意事项:为避免解析冲突,若域名解析原来有配置A记录或MX记录,添加CNAME记录时应将原A或MX记录暂停解析或删除。同一区域不能同时有CNAME记录和A记录。DNS变更解析到实际生效需要一段时间,期间可能会导致网站暂时不可访问。CNAME域名不可以直接作为访问域名使用。
5. 节点缓存过期配置
缓存过期配置是CDN使用中的核心环节,决定了源站资源在CDN节点的缓存更新频率。合理的缓存策略可以显著提升命中率、降低回源频率。
5.1 配置入口
- 登录CDN控制台,单击左侧菜单内的“域名管理”。
- 选择需要配置的域名,单击“管理”进入域名配置页面。
- 单击“缓存配置”,切换至缓存配置标签页。
- 单击“新增规则”,进入新增规则页面。
5.2 配置项说明
- 类型:支持对全部文件、文件后缀、文件目录、全路径文件、首页进行配置。
- 内容:根据选择的类型输入对应的内容。文件后缀多个以分号间隔,如“jpg;png;css”。文件目录不能以“/”结尾,多个以分号分隔。全路径文件多个以分号分隔。内容区分大小写。
- 缓存选项:支持遵循源站、缓存、不缓存三种规则。
5.3 缓存策略建议
对于图片、字体、CSS、JS等版本化资源(文件名包含hash值),可以设置较长的缓存时间(如7天或更长)。对于HTML文件,建议缓存时间短一些,因为HTML通常负责引用最新的静态资源,如果缓存过久用户可能无法及时看到新版本页面。对于不希望缓存的内容(如动态接口),可以设置不缓存规则。
一个常见的缓存策略配置示例:
*.js;*.css;*.png;*.jpg;*.woff;*.ttf → 缓存7天
*.html;*.htm → 缓存5分钟
/api/* → 不缓存注意事项:缓存过期时间过短会导致CDN频繁回源,增加源站带宽压力;缓存过期时间过长会导致CDN缓存更新慢,影响用户获取最新资源。建议源站资源更新前后使用不同的名称,如以版本号(img-v1.jpg、img-v2.jpg)的方式命名,避免源站变更资源内容后CDN节点因缓存未过期仍返回旧资源。
6. 缓存刷新与预热
当源站资源更新后,如果需要立刻更新CDN节点的缓存,可以使用缓存刷新功能主动更新CDN节点未过期的缓存,使CDN节点缓存与源站资源保持一致。
6.1 缓存刷新
缓存刷新支持两种模式:
- 刷新变更资源:当用户访问匹配资源时,CDN节点会回源获取资源的Last-Modified信息。若与当前缓存资源一致,则直接返回已缓存资源;若不一致,回源拉取新资源并重新缓存。
- 刷新全部资源:当用户访问匹配资源时,直接回源拉取新资源返回给用户,并重新缓存新资源。
刷新操作支持按URL刷新或按目录刷新。默认情况下境内、境外加速区域每日URL刷新额度为各10000条,目录刷新额度为各100条。
6.2 缓存预热
缓存预热是指通过指定URL,CDN边缘节点将模拟真实用户请求向源站请求文件,提前预载至所有CDN边缘节点内,建立文件缓存。预热完成后,用户请求对应文件时可直接从CDN节点获取。
预热特别适用于大文件或热门文件,如新版本安装包发布前或运营活动发布前,提前将资源预热至CDN加速节点,有效降低回源率,提升用户体验。默认情况下境内、境外每日预热URL限额为各1000条,每次最多可提交500条URL。
6.3 通过API执行刷新与预热
腾讯云CDN的API接口均为API 3.0接口。您可以通过API对CDN进行操作,包括创建加速域名、修改域名配置、数据分析、刷新预热等。
刷新URL的API接口为PurgeUrlsCache:
POST https://cdn.tencentcloudapi.com/
Action=PurgeUrlsCache
&Urls.0=https://www.example.com/path/file.js
&Urls.1=https://www.example.com/path/style.css预热URL的API接口为PushUrlsCache:
POST https://cdn.tencentcloudapi.com/
Action=PushUrlsCache
&Urls.0=https://www.example.com/path/file.zip7. HTTPS配置
腾讯云CDN全面支持HTTPS加速服务。您可以通过上传自有证书进行部署,也可以将已经托管至腾讯云SSL证书管理的证书直接部署至CDN平台。
7.1 上传自有证书
- 登录CDN控制台,在左侧菜单栏中进入“证书管理” > “证书配置”。
- 单击“批量配置”,可通过上传证书自动匹配适配的域名进行批量配置。
- 准备好证书内容(包括证书公钥和私钥)后,按提示上传即可。
7.2 使用腾讯云SSL证书
- 登录SSL证书控制台,进入证书列表。
- 选择需要部署的证书,单击“部署”。
- 在证书部署页面选择“内容分发网络”,按需选择CDN资源,单击确定等待部署即可。
腾讯云还提供由亚洲诚信免费提供的第三方证书,可在证书管理控制台申请。
8. 用量封顶与监控报警
为防止因流量盗刷或异常访问产生高额费用,腾讯云CDN提供了用量封顶配置功能。
8.1 用量封顶配置
当统计周期内产生的带宽或流量超出配置的告警阈值时,CDN会推送消息通知您;超出配置的访问阈值时,您可选择关闭CDN服务,避免产生更多CDN服务费用。需要注意的是,用量封顶配置生效存在一定延迟(约10分钟)。
8.2 监控与告警
腾讯云CDN支持多种告警方式,包括电话、短信、邮件等,允许用户自定义告警内容和处理流程。CDN访问日志还可以投递至腾讯云日志服务CLS,实现实时性能监控、延迟百分位告警、错误峰值检测、缓存命中分析、下载速度分析以及仪表盘可视化。
9. 通过API Explorer调用CDN API
腾讯云API Explorer提供了在线调用、签名验证、SDK代码生成和快速检索接口等能力。您可以通过API Explorer查看每次调用的请求内容和返回结果,并自动生成各语言版本的SDK调用示例。
9.1 使用API Explorer调用接口
- 进入API Explorer工具页面。
- 选择需要调用的CDN接口(如AddCdnDomain新增加速域名)。
- 填写接口所需的输入参数。
- 单击“在线调用”,查看请求内容和返回结果。
- 系统可自动生成Python、Java、Go等语言的SDK调用示例代码。
9.2 常用CDN API接口
- AddCdnDomain:新增加速域名
- StartCDNDomain:启用/禁用CDN加速域名
- PurgeUrlsCache:提交URL刷新任务
- PurgePathCache:提交目录刷新任务
- PushUrlsCache:提交URL预热任务
- DescribePushTasks:查询缓存预热任务列表、状态、进度和失败原因
10. 通过Python SDK实现自动化运维
腾讯云提供了官方的Python SDK,允许开发者通过编程方式管理CDN服务。
10.1 安装SDK
pip install tencentcloud-sdk-python-common
pip install tencentcloud-sdk-python-cdn10.2 获取API密钥
前往腾讯云访问管理 > API密钥管理,获取SecretId和SecretKey。建议使用子账号并授予最小权限,避免使用主账号密钥。
10.3 Python SDK调用示例——刷新URL
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
def purge_urls(secret_id, secret_key, urls):
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.PurgeUrlsCacheRequest()
params = {'Urls': urls}
req.from_json_string(json.dumps(params))
resp = client.PurgeUrlsCache(req)
return json.loads(resp.to_json_string())
if __name__ == '__main__':
result = purge_urls(
secret_id='YOUR_SECRET_ID',
secret_key='YOUR_SECRET_KEY',
urls=['https://www.example.com/js/app.js', 'https://www.example.com/css/style.css']
)
print(result)10.4 Python SDK调用示例——预热URL
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
def push_urls(secret_id, secret_key, urls):
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.PushUrlsCacheRequest()
params = {'Urls': urls}
req.from_json_string(json.dumps(params))
resp = client.PushUrlsCache(req)
return json.loads(resp.to_json_string())
if __name__ == '__main__':
result = push_urls(
secret_id='YOUR_SECRET_ID',
secret_key='YOUR_SECRET_KEY',
urls=['https://www.example.com/download/app-v2.0.zip']
)
print(result)11. 接入CDN的最佳实践
综合以上各章节的内容,以下是一些接入腾讯云CDN的生产级最佳实践建议:
- 静态资源使用独立域名:避免和主站API共用域名,便于独立配置缓存策略和流量管理。
- 前端构建产物开启文件hash:方便实现长缓存策略,每次构建后文件名变化,用户直接请求新资源,避免旧缓存问题。
- 不要在代码中暴露永久密钥:使用子账号和临时密钥进行API调用。
- 公开资源和私有资源分离:使用不同存储桶或不同目录策略管理。
- 合理设置缓存过期时间:版本化资源设置长缓存(7天以上),HTML等入口文件设置短缓存(5分钟以内),动态接口设置不缓存。
- 发布新版本时执行刷新或预热:确保用户及时获取最新资源。
- 配置用量封顶和监控告警:防止流量盗刷产生意外费用。
- 源站位置与加速区域匹配:避免跨境回源导致的回源失败或速度变慢。
12. 常见问题解答
Q1:添加加速域名时提示“域名未备案”怎么办?
如果加速区域选择中国境内或全球,域名需要在工信部完成备案。请先完成域名备案,等待1至2个小时后再重试添加域名。如果仅加速中国境外区域,域名可以不需要备案。
Q2:配置CNAME后多长时间生效?
CNAME解析生效时间取决于DNS服务商的TTL设置,默认为600秒(10分钟)。如果使用DNSPod一键配置,TTL默认值为600秒。配置完成后可通过CDN控制台的“验证CNAME状态”功能查看是否已生效。
Q3:CDN缓存刷新后为什么用户还是看到旧内容?
可能有以下原因:刷新任务尚未完成全网下发;用户本地浏览器缓存了旧内容(可通过强制刷新或清除浏览器缓存解决);刷新时提交的URL与用户访问的URL不完全一致(注意协议、域名、路径的大小写)。
Q4:如何查看CDN的缓存命中率?
可以在CDN控制台的“数据分析”或“监控”模块中查看域名的缓存命中率统计。也可以将CDN访问日志投递至腾讯云日志服务CLS,进行更细粒度的缓存命中分析。
Q5:CDN流量包可以跨区域抵扣吗?
不可以。CDN流量包区分计费区域,不能跨计费大区抵扣。例如购买了北美区域流量包,仅可抵扣访问至北美节点的用户产生的流量消耗。流量包仅适用于按流量计费模式,带宽计费模式下流量包无法抵扣。
Q6:如何防止CDN流量被盗刷?
可以采取以下措施:配置用量封顶,当流量或带宽超出阈值时自动关闭CDN服务;配置区域访问控制,设置IP黑白名单;配置防盗链(Referer白名单);开启监控告警,及时发现异常流量。




