网站、小程序、APP下载、图片视频业务上线之后,静态图片、JS、CSS、字体、安装包、视频片段等静态资源如果全部由源站直接对外提供服务,会出现诸多痛点:跨地域用户访问延迟高,大量用户并发访问直接打满源站带宽,源站服务器压力巨大,带宽成本居高不下。阿里云CDN内容分发网络(Content Delivery Network,CDN)正是为解决这一难题而生的分布式网络服务,它由遍布全球的边缘节点服务器群组成,将源站资源缓存到阿里云遍布全球的加速节点,当终端用户请求访问和获取源站资源时无需回源,可就近获取CDN节点上已经缓存的资源,提高资源访问速度,同时分担源站压力。本文全面介绍阿里云CDN的功能、计费规则与配置接入流程,并附CLI与Python SDK实操命令,帮助开发者完成从域名接入到业务稳定上线的全流程落地。
先看CDN的产品定位与核心能力。阿里云CDN在全球拥有3200+节点,其中中国内地拥有2300+节点,覆盖31个省级区域;海外、中国香港、中国澳门拥有900+节点,覆盖70多个国家和地区,全网带宽输出能力达180 Tbps。CDN的核心工作逻辑是:用户请求加速域名,智能DNS调度用户访问就近边缘节点;节点没有缓存资源,则向源站发起回源拉取资源,资源缓存到边缘节点之后返回给用户;后续相同请求直接读取节点缓存,不再访问源站,实现加速、降低源站压力的效果。CDN接入快捷简单,不需要调整现有业务结构,只需在CDN控制台进行简单操作,即可将域名接入,享受全球链路加速服务。详情👉访问阿里云 CDN 服务平台了解
CDN的核心产品能力涵盖八个方面。一是全球边缘节点网络,就近访问加速,支持OSS、ECS、自建服务器多种源站类型,OSS作为源站场景同地域回源走内网链路,回源不产生外网流量开销。二是精细化缓存策略管控,支持后缀匹配、路径匹配、请求头匹配多种缓存规则,可针对图片、脚本、视频、下载包分别设置缓存过期时长,支持自定义Cache-Key控制哪些URL参数参与缓存key计算,支持状态码缓存,支持源站缓存头优先模式。三是强大回源能力,支持自定义回源HOST解决虚拟主机多站点部署场景,支持Range分片回源、回源302跟随、回源SNI配置,支持权重多源站主备故障自动切换。四是刷新预热能力,刷新功能可主动清除边缘节点旧缓存,预热功能可在活动大促前将热门资源推送到各边缘节点,刷新预热有每日额度限制。五是完整安全访问防护体系,支持Referer防盗链黑白名单、IP黑白名单、URL鉴权、HTTPS加速、跨域CORS配置、边缘WAF防护。六是完善监控与日志分析,提供命中率、QPS、带宽峰值、回源带宽、错误码占比等丰富指标,支持实时日志投递。七是规则引擎与边缘脚本能力,实现重定向、修改请求头响应头、修改缓存策略等复杂逻辑。八是完整OpenAPI与阿里云CLI支持自动化运维,适合DevOps流水线。
再看计费规则。CDN整体分为基础必选服务和可选增值服务两大部分。基础服务有三种计费模式:一是按流量计费(系统默认),按照用户访问产生的下行实际流量计费,自然月账号维度阶梯累进,流量越大单价越低,按小时后付费,支持购买下行流量资源包抵扣,适合流量波动大、峰值尖峰明显的业务,绝大多数中小网站、小程序业务优先选择;二是按带宽峰值计费,按每日带宽峰值计费,每5分钟采集带宽数据取当日最大值按日结算,适合流量曲线平稳、带宽利用率高的业务,该模式无法使用流量资源包抵扣;三是月结95带宽峰值计费,面向月消耗较高的企业客户,需要商务申请开通。增值服务计费项包括静态HTTPS请求数、QUIC请求数、边缘WAF防护、实时日志投递等,各计费项默认关闭,需要手动开通,不使用不计费。详情👉访问阿里云 CDN 服务平台了解
资源包抵扣规则方面,下行流量资源包仅在按流量计费模式生效,账号级别自动抵扣,多个加速域名共用资源包;中国大陆与海外区域资源包相互独立,不能跨区域抵扣;流量资源包只抵扣下行流量,不能抵扣HTTPS请求数等增值计费项,资源包过期后不结转剩余额度。计费避坑重点有五条:一是CDN关闭后本地DNS还有缓存,短时间内仍会有少量请求打到CDN节点产生少量流量,属正常现象;二是回源流量CDN不收费,但源站(ECS/OSS)会产生流出流量,OSS优先同地域源站使用内网回源消除外网回源流量;三是Referer防盗链没配置,资源被爬虫盗刷会产生巨额下行流量账单,上线务必配置防盗链或URL鉴权;四是HTTPS请求数属于独立计费项,流量包不能抵扣,业务量大需同时购买HTTPS请求资源包;五是按带宽峰值计费模式下流量资源包不生效。
域名接入全流程清晰简单。进入CDN控制台域名管理页面,添加加速域名,填写业务域名,选择加速区域(中国大陆/全球);配置源站信息,源站类型选择OSS域名或ECS服务器IP/域名,填写源站地址并设置回源HOST,OSS源站优先选择同地域并开启内网回源;配置缓存规则,区分图片、脚本、下载文件设置缓存过期时间,动态接口页面设置不缓存;配置HTTPS证书,从数字证书管理服务选择已签发证书并开启强制跳转HTTPS;配置安全策略,Referer防盗链黑白名单、IP黑白名单,需要前端JS访问的资源配置跨域CORS响应头;域名添加完成后在控制台获取CNAME记录,域名解析服务商把业务域名CNAME指向CDN分配域名,等待解析生效并测试访问。最佳实践是动态接口不要接入普通CDN,普通CDN适合静态资源;图片、JS、CSS、字体、视频、安装包这类静态资源接入CDN。
阿里云CLI可以完成刷新、预热、查询域名信息,适合自动化脚本执行,需要提前配置账号AccessKey权限,可执行命令如下:
# 安装阿里云CLI并配置凭证
npm install -g @alicloud/cli
aliyun configure
# 查询账号下CDN加速域名列表
aliyun cdn DescribeCdnDomains
# URL刷新,清除单条资源缓存
aliyun cdn RefreshObjectCaches --ObjectPath "[https://cdn.demo.com/images/a.jpg](https://cdn.demo.com/images/a.jpg)" --ObjectType File
# 目录刷新,刷新整个目录下全部缓存
aliyun cdn RefreshObjectCaches --ObjectPath "[https://cdn.demo.com/images/](https://cdn.demo.com/images/)" --ObjectType Directory
# 资源预热,把资源主动推送到边缘节点
aliyun cdn PushObjectCache --ObjectPath "[https://cdn.demo.com/files/demo.zip](https://cdn.demo.com/files/demo.zip)"
也可以通过Python SDK完成同样的自动化操作,先安装依赖:
pip install alibabacloud_cdn20180510
Python调用示例代码如下:
import os
from alibabacloud_cdn20180510.client import Client as CdnClient
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_cdn20180510 import models as cdn_models
def create_cdn_client():
config = open_api_models.Config()
config.access_key_id = os.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
config.access_key_secret = os.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
config.endpoint = "cdn.aliyuncs.com"
return CdnClient(config)
def list_cdn_domains():
client = create_cdn_client()
resp = client.describe_cdn_domains()
for domain_info in resp.body.domains.domain_data:
print(f"域名:{domain_info.domain_name},状态:{domain_info.status}")
def refresh_url(url: str):
client = create_cdn_client()
req = cdn_models.RefreshObjectCachesRequest()
req.object_path = url
req.object_type = "File"
resp = client.refresh_object_caches(req)
print(f"刷新任务ID:{resp.body.refresh_task_id}")
if __name__ == "__main__":
list_cdn_domains()
refresh_url("[https://cdn.demo.com/img/test.jpg](https://cdn.demo.com/img/test.jpg)")
CNAME解析配置完成后,可以使用nslookup命令验证加速是否生效,输入nslookup -type=CNAME 服务域名,如果返回的解析结果和CDN控制台上该域名对应的CNAME值一致,则表示CDN加速已经生效。
缓存策略与安全配置方面有几个关键实践。缓存规则配置上,图片jpg、png、webp,字体woff2等静态资源更新频率低,设置较长缓存时间;JS、CSS资源建议设置中等缓存时长;动态接口、表单页面设置不缓存;资源更新建议带上版本哈希后缀,例如/js/main?v=123,更新版本修改参数,不需要执行刷新操作直接命中新资源。Referer防盗链配置上,填写业务域名白名单,勾选允许空Referer根据业务实际情况,禁止直接放行全部Referer,防止盗链爬虫大量下载资源;对于APP客户端场景,客户端没有Referer请求头,需要开启允许空Referer或改用URL鉴权模式。跨域CORS配置上,前端JS直接加载CDN图片、字体时会触发跨域校验,在CDN控制台修改出站响应头添加Access-Control-Allow-Origin等跨域响应头即可。URL鉴权适合APP下载、付费素材分发场景,访问URL带时效签名,过期链接直接拒绝访问,比Referer防盗链安全性更高。
成本优化方面,重点是提升缓存命中率、减少回源请求,合理设置缓存过期时间,静态资源尽量长缓存,资源更新使用版本哈希参数减少频繁刷新操作;OSS源站务必使用同地域源站并开启内网回源,消除源站外网流出流量开销;上线必须配置防盗链或URL鉴权,避免爬虫盗刷产生巨额下行流量账单;业务流量稳定优先购买流量资源包,流量波动大、测试业务直接按量付费;不需要时不要开启实时日志投递、边缘WAF增值功能,按需开启减少额外计费;大促活动提前做资源预热,避免活动瞬间大量回源,同时降低源站压力。
常见报错排错上,访问资源404时检查CNAME解析是否生效、回源HOST配置是否正确、源站是否存在对应文件、源站安全组是否放行CDN回源IP;更新源站资源浏览器依旧看到旧版本时,执行URL刷新或清除浏览器缓存;缓存命中率持续很低时,检查缓存过期时间设置过短、URL参数变化导致Cache-Key不一致、资源频繁刷新、动态资源错误接入CDN;HTTPS访问报错不安全时,检查证书是否完整部署、证书域名与加速域名匹配、443端口源站正常;账单流量暴涨时,优先排查资源是否被盗链爬虫抓取,立刻配置防盗链或URL鉴权;回源502、503错误时,检查源站负载过高、源站防火墙拦截CDN回源IP、源站HTTPS证书异常或回源SNI配置错误。详情👉访问阿里云 CDN 服务平台了解
综合来看,阿里云CDN把静态资源缓存到遍布各地边缘节点,就近响应用户请求,降低访问延迟,大幅削减源站服务器带宽压力,是网站、小程序、APP业务静态分发的标准解决方案。接入业务需要区分静态资源与动态接口,动态接口不适合普通CDN;上线务必配置防盗链防护,避免盗刷带来高额账单。调优核心目标是提升缓存命中率,合理规划缓存规则,资源更新优先使用版本哈希,减少刷新调用;OSS源站优先同地域内网回源,降低源站流量开销。同时可以通过OpenAPI、CLI实现刷新预热自动化,融入CI/CD发布流程,版本发布自动清理缓存,减少人工运维工作量,保障静态资源分发稳定、低成本、高性能。