在互联网业务的运行过程中,图片、页面样式文件、脚本、音视频资源、APP安装包等静态文件会占据绝大部分外网带宽。如果用户请求全部直接穿透访问源站服务器,会带来一系列棘手问题。当用户分布在不同地域,远距离访问源站会带来网络链路延迟高,页面打开速度慢;遇到营销大促、流量突增场景,源站带宽很容易被瞬间打满,业务出现卡顿、访问失败;大量外部访问持续消耗源站带宽,推高整体网络开销;源站服务器同时承担动态业务逻辑处理与大文件下载任务,CPU、磁盘IO、带宽资源被大量占用,直接影响接口服务的响应质量。详情👉访问阿里云 CDN 服务平台了解
CDN内容分发网络就是专门解决静态资源分发痛点的边缘云服务。依托遍布全球的边缘节点集群,CDN会把业务资源缓存到距离终端用户最近的边缘服务器节点。用户发起资源请求,就近调用边缘节点缓存内容,不需要每一次请求都回源站拉取数据,以此降低访问延迟,削减源站带宽压力,抵御突发流量冲击,减少外网流量开销。网站H5、小程序、移动应用、音视频点播、软件包下载、跨境出海业务,都可以借助CDN实现业务加速。本文完整梳理CDN整体架构、全部核心功能模块、计费明细,附带控制台操作流程、Python SDK、cURL、Shell运维脚本等可直接复制运行的代码片段,讲解域名接入部署、缓存调优、安全防护、成本管控、高频故障排查,覆盖个人站点、中小项目、大中型出海业务的实际落地需求。详情👉访问阿里云 CDN 服务平台了解
一、CDN整体产品架构与基础工作原理
CDN整套体系分为边缘节点层、调度层、回源网络层、配置管控层、安全能力层、监控运维层六大核心模块。边缘节点层部署在国内各个省市以及海外多国地区,海量边缘服务器负责缓存业务资源,直接接收和响应用户访问请求;调度层依托DNS调度系统,读取来访用户IP所属地域与运营商信息,自动将用户请求分配至网络延迟最低的边缘节点,实现就近访问;回源网络层,当边缘节点没有命中有效缓存,就会向源站获取资源,回源链路使用BGP高质量网络,保障回源的传输速度;配置管控层负责将缓存、防盗链、HTTPS、规则引擎等配置统一下发至全部边缘节点;安全能力层集成Referer防盗链、URL鉴权、访问控制、缓存穿透防护等安全能力;监控运维层提供带宽流量、请求数量、缓存命中率、状态码统计,配套告警通知、离线日志、实时日志投递能力。
完整的业务访问流程如下:用户浏览器发起静态资源访问请求,DNS调度将域名解析到就近的边缘节点;边缘节点校验本地是否保存有效的缓存副本,如果缓存命中,直接将资源返回给终端用户;当缓存不存在、缓存过期失效,边缘节点就向源站发起回源请求获取资源;源站返回资源数据之后,边缘节点保存这份资源作为缓存,同时把内容返回用户。后续其他用户访问同一个资源,就可以直接读取边缘缓存,不再访问源站。
CDN对源站类型没有硬性限制,源站可以是云服务器、对象存储存储空间,也可以是自建IDC机房服务器。业务接入CDN最核心两步操作是添加加速域名,配置源站信息,修改域名CNAME解析记录,域名解析生效之后,用户流量就全部经过CDN边缘网络进行分发加速。
二、CDN平台核心功能模块详解
2.1 精细化缓存策略,提升缓存命中率
缓存属于CDN的核心能力,缓存策略设置直接决定回源请求数量、源站服务器压力,同时影响终端用户访问体验。平台支持根据文件后缀、访问请求路径、请求头设置差异化缓存过期时间。图片、视频、JS、CSS这类极少变更的静态资源,可以设置较长缓存时长;HTML动态页面建议设置较短缓存时间,或者配置为不缓存,保证页面内容可以快速更新。
平台支持忽略URL参数的配置,很多业务访问请求会携带大量无业务意义的查询参数,不同参数访问同一个文件,默认情况下会生成多份独立缓存副本。开启忽略URL参数功能之后,系统剔除无效参数生成缓存key,能够显著提升缓存命中率。同时支持异常状态码缓存配置,针对404、500等错误响应码配置缓存时间,避免大量访问不存在资源的请求反复穿透回源,压垮源站。Range分片回源适配视频、大型压缩包这类大文件,支持分片请求资源,不需要一次性拉取完整文件,优化大文件首屏加载体验,减少回源流量消耗。
缓存存在明确优先级规则:源站返回的Cache‑Control响应头优先级最高,其次才是控制台自定义缓存规则。业务调试阶段需要重点关注源站返回的HTTP响应头,避免控制台配置完成之后实际并未生效。
2.2 刷新与预热,实现资源更新快速生效
业务版本迭代、图片素材更新之后,旧版本资源仍然保存在全网各个边缘节点缓存中,用户依旧会读取旧的内容,这时就需要使用刷新功能。刷新分为URL刷新与目录刷新,URL刷新针对单个资源清除节点缓存;目录刷新清理整个目录下全部缓存资源。提交刷新任务之后,全网边缘节点逐步清除缓存,下一次用户访问就会触发回源,获取源站最新资源。
预热功能可以主动将源站资源提前推送至各个边缘节点,用户首次访问就直接命中缓存,适合大促活动上线、新版本发布场景,避免大量用户同时访问瞬间产生大规模回源请求,造成源站压力激增。刷新、预热功能均设置每日任务额度,大规模业务要合理规划提交时机,不要短时间提交大批量任务。
2.3 灵活的回源配置,适配多样化源站场景
回源即边缘节点向源站拉取资源的过程,CDN提供全套自定义回源配置项。支持配置主备源站,当主源站故障不可访问,自动切换访问备源站,保障业务访问连续性;支持自定义回源HOST,一台源站服务器托管多个网站业务时,通过回源HOST指定访问源站对应的站点;支持选择HTTP或者HTTPS回源协议,同时支持自定义回源端口;支持改写、新增、删除回源请求头,适配源站自身鉴权逻辑。
当源站为私有读写权限的对象存储存储空间,开启私有回源授权,CDN回源时会自动携带访问签名,正常读取私有桶内文件,无需修改存储桶为公共读模式,兼顾业务安全与加速效果。
2.4 HTTPS全链路加密,兼容HTTP/3协议
CDN支持托管SSL证书,用户既可以上传自有证书,也可以申领免费证书,完成客户端到CDN节点之间HTTPS加密访问。支持配置HTTP强制跳转HTTPS,用户访问HTTP协议会自动301重定向到HTTPS地址;支持TLS版本管控,关闭老旧不安全的TLS1.0、TLS1.1,只保留TLS1.2、TLS1.3等高安全版本。同时兼容HTTP/3也就是QUIC协议,在移动端弱网络环境中,提升访问成功率,降低网络抖动带来的卡顿问题。还支持OCSP装订,缩短HTTPS握手耗时,进一步优化SSL握手性能。
2.5 多层安全防护,防盗链与访问鉴权
资源盗链是线上业务经常遇到的问题,第三方站点直接引用业务图片、视频链接,消耗大量CDN流量,带来不必要的账单开销。Referer防盗链可以配置域名白名单,只允许自有域名访问资源,拦截非法来源访问请求。
安全等级要求更高的业务,可以开启URL鉴权,资源访问链接需要携带加密生成的鉴权参数以及过期时间,缺少合法鉴权参数直接返回403拒绝访问。访问链接自带有效期,即使链接发生泄露,到期之后就无法继续访问资源。配套IP黑白名单,放行或者拦截指定IP网段访问加速域名;缓存穿透防护拦截大量访问不存在资源的恶意请求,避免恶意请求全部回源打穿源站。带宽封顶功能能够设置域名带宽最大阈值,遭遇恶意攻击带宽到达阈值后限制访问,避免流量无限飙升产生高额账单。详情👉访问阿里云 CDN 服务平台了解
2.6 规则引擎与边缘脚本,实现边缘侧高度自定义
规则引擎采用可视化图形配置界面,可以根据请求路径、请求头、请求参数设置匹配条件,执行缓存调整、回源改写、重定向、请求头修改、访问拦截等操作,满足复杂业务定制需求。面对更加复杂的业务逻辑,还可以启用边缘脚本,编写轻量脚本代码在边缘节点直接运行,完成请求修改、响应改写、自定义鉴权、流量拦截等高级逻辑,无需改动源站业务代码,全部处理逻辑运行在边缘节点。
2.7 日志、监控告警与报表体系
CDN会生成离线访问日志,保存每一条用户访问记录,包含客户端IP、访问时间、请求URL、状态码、响应大小、Referer、UA等信息,可以下载日志用于业务行为分析、安全故障排查。同时支持开启实时日志投递,访问日志秒级投递到日志服务,实现实时数据分析。
监控面板能够查看带宽峰值、下行流量、请求数量、回源流量、缓存命中率、各类状态码占比。缓存命中率是衡量CDN加速效果的核心指标,命中率越高代表回源请求越少,源站压力越小。支持配置监控告警,带宽异常波动、请求量突变、命中率大幅下跌时,推送告警消息通知运维人员,及时感知业务异常。运营报表可以按天、按周统计域名访问数据,方便业务复盘分析。
2.8 完整开放API与SDK,支撑自动化运维
CDN几乎全部功能,新增加速域名、修改配置、提交刷新预热任务、查询监控指标、查询日志任务,全部对外提供RESTful API接口。官方提供多语言SDK,开发人员可以编写脚本批量管理大量加速域名,把CDN能力集成到自研运维平台,实现自动化域名部署、缓存自动刷新,对接CI/CD发布流程,新版本发布自动调用API刷新缓存,不用人工登录控制台操作。
三、CDN计费体系完整解析
CDN计费由基础下行流量带宽费用,叠加HTTPS请求、实时日志投递等增值服务费用构成,支持按量付费、资源包预付费两种大模式。
按量付费又细分为按流量计费、按带宽峰值计费。按流量计费按照实际下行流量阶梯结算,用多少扣多少,适合流量波动幅度较大的业务;按带宽峰值计费,以每日带宽峰值作为结算依据,适合流量规模稳定的大中型业务。平台默认设置带宽上限,规避恶意攻击造成账单无上限增长。
资源包模式为预先购买流量包,抵扣CDN下行流量,相比按量付费单价更低,适合流量规模可以预估的业务。资源包分为国内资源包、海外资源包,国内、海外流量分开抵扣,购买的时候需要区分地域。
增值服务按需计费,HTTPS请求次数、实时日志投递、边缘脚本等能力,默认处于关闭状态,开启使用之后才会产生计费。回源访问源站产生的流量,归源站侧产品计费,不属于CDN计费项。
很多业务采用对象存储作为源站,由CDN对外分发资源,对比用户直接访问对象存储外网域名,整体成本更低,CDN流量单价低于对象存储外网流出单价,属于成熟的云上静态资源架构方案。
四、实操接入教程,附带完整可运行代码
4.1 控制台接入CDN基础操作步骤
- 开通CDN服务,进入CDN管理控制台;
- 添加加速域名,填写业务域名,选择业务类型,录入源站地址信息;
- 根据业务需求配置缓存策略、防盗链规则、上传配置HTTPS证书;
- 获取CDN分配的CNAME地址,前往域名DNS服务商,修改域名解析记录指向该CNAME;
- 等待DNS解析全网生效,访问业务域名,查看监控指标确认CDN加速已经生效。
4.2 Python SDK调用CDN接口,提交URL刷新任务
运行代码前,执行依赖安装命令:
pip install alibabacloud‑cdn20180510
pip install alibabacloud_tea_openapi python‑dotenv
Python完整代码:
# pip install alibabacloud‑cdn20180510
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
import os
from dotenv import load_dotenv
load_dotenv()
def create_cdn_client():
config = open_api_models.Config(
access_key_id=os.getenv("CDN_AK_ID"),
access_key_secret=os.getenv("CDN_AK_SECRET"),
endpoint="cdn.aliyuncs.com"
)
return CdnClient(config)
def refresh_url_list(url_array):
"""提交URL刷新任务"""
client = create_cdn_client()
req = cdn_models.RefreshObjectCachesRequest()
req.object_path = "\n".join(url_array)
req.object_type = "File"
resp = client.refresh_object_caches(req)
print(f"刷新任务ID:{resp.body.refresh_task_id}")
return resp.body.refresh_task_id
if __name__ == "__main__":
refresh_list = [
"[https://static.demo.com/images/a.jpg](https://static.demo.com/images/a.jpg)",
"[https://static.demo.com/css/main.css](https://static.demo.com/css/main.css)"
]
task_id = refresh_url_list(refresh_list)
print(f"已提交刷新任务,任务编号 {task_id}")
4.3 Python查询CDN域名监控带宽流量指标
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
import os
import json
from dotenv import load_dotenv
load_dotenv()
client_config = open_api_models.Config(
access_key_id=os.getenv("CDN_AK_ID"),
access_key_secret=os.getenv("CDN_AK_SECRET"),
endpoint="cdn.aliyuncs.com"
)
cdn_client = CdnClient(client_config)
def get_domain_traffic(domain,start_time,end_time):
req = cdn_models.DescribeDomainBpsDataRequest()
req.domain_name = domain
req.start_time = start_time
req.end_time = end_time
resp = cdn_client.describe_domain_bps_data(req)
return resp.body
if __name__ == "__main__":
result = get_domain_traffic("static.demo.com","2026‑08‑22T00:00:00Z","2026‑08‑22T23:59:59Z")
print(json.dumps(result.to_map(),ensure_ascii=False,indent=2))
4.4 cURL请求格式示例(CDN OpenAPI需要HMAC签名,业务开发优先SDK)
# CDN OpenAPI需要HMAC签名,下面仅展示参数格式,不要直接复制运行
export AK="你的AccessKeyId"
export SK="你的AccessKeySecret"
curl -X POST [https://cdn.aliyuncs.com](https://cdn.aliyuncs.com) \
-H "Content‑Type:application/x‑www‑form‑urlencoded" \
‑d "Action=RefreshObjectCaches&ObjectType=File&ObjectPath=[https://static.demo.com/demo.js](https://static.demo.com/demo.js)"
4.5 Shell脚本批量读取url文本文件执行刷新任务
保存为 cdn_refresh.sh:
#!/bin/bash
#cdn_refresh.sh 读取url.txt内的链接,调用python脚本执行CDN刷新
URL_FILE="./url.txt"
if [ ! -f ${URL_FILE} ];then
echo "url.txt文件不存在"
exit 1
fi
#读取全部url,传入python脚本批量刷新
cat ${URL_FILE} | python3 - <<END
import sys
import os
from dotenv import load_dotenv
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
load_dotenv()
conf = open_api_models.Config(access_key_id=os.getenv("CDN_AK_ID"),access_key_secret=os.getenv("CDN_AK_SECRET"),endpoint="cdn.aliyuncs.com")
cli = CdnClient(conf)
urls = [line.strip() for line in sys.stdin if line.strip()]
req = cdn_models.RefreshObjectCachesRequest()
req.object_path = "\n".join(urls)
req.object_type = "File"
res = cli.refresh_object_caches(req)
print("提交刷新任务ID:",res.body.refresh_task_id)
END
echo "批量刷新任务提交完成"
执行命令:
chmod +x cdn_refresh.sh
./cdn_refresh.sh
4.6 URL鉴权链接生成Python片段
import hashlib
import time
def generate_cdn_auth_url(origin_url,auth_key,expire_second=3600):
"""生成CDN鉴权访问链接"""
expire_ts = int(time.time()) + expire_second
md5_source = f"{auth_key}{origin_url}{expire_ts}"
md5_val = hashlib.md5(md5_source.encode("utf‑8")).hexdigest()
final_url = f"{origin_url}?auth_key={expire_ts}_{md5_val}"
return final_url
if __name__ == "__main__":
auth_key_str = "my_secret_key_001"
url = "[https://static.demo.com/video/demo.mp4](https://static.demo.com/video/demo.mp4)"
print(generate_cdn_auth_url(url,auth_key_str,7200))
五、典型业务落地场景
第一,网站与H5页面加速。网页图片、JS、CSS静态资源接入CDN,缩短页面加载耗时,降低源站服务器带宽压力,提升用户浏览体验,是Web站点最常用的接入场景。
第二,对象存储静态资源分发。对象存储存放图片、音视频文件,CDN作为分发层,是行业非常成熟的架构,兼顾存储成本与访问速度。
第三,音视频点播业务。MP4、HLS视频资源接入CDN,开启Range分片回源,优化视频起播速度,支撑大量用户同时播放视频。
第四,APP安装包、软件包下载加速。大文件分发场景,依靠海量边缘节点,全国各地用户实现高速下载,避免源站被下载流量打垮。
第五,出海跨境业务。开启海外加速节点,海外用户就近访问海外边缘节点,解决跨地域访问延迟过高的痛点。
第六,小程序、移动端业务图片资源分发。大量图片资源交由CDN完成分发,源站只负责处理业务接口逻辑,分离静态、动态业务压力。
六、业务落地避坑与成本优化指南
第一,DNS CNAME解析配置务必正确。域名解析必须指向CDN分配的CNAME记录,流量才会经过CDN网络,配置完成可以使用nslookup命令校验解析结果。
第二,合理配置缓存策略,持续关注缓存命中率。静态资源设置较长缓存时间;动态页面配置禁止缓存;开启忽略无效参数,提升整体命中率。命中率偏低代表大量请求穿透回源,源站压力与回源流量会同步上涨。
第三,防盗链按需开启。图片、视频业务建议配置Referer防盗链,安全等级高的业务搭配URL鉴权,防止资源被盗链消耗大量流量。
第四,分清刷新与预热的作用。刷新用于删除旧缓存内容;预热是主动将资源推送到边缘节点;不要短时间大批量提交刷新预热任务,留意每日额度限制。
第五,排查缓存配置不生效问题。源站返回Cache‑Control HTTP头优先级高于控制台配置,如果控制台缓存规则不生效,优先排查源站侧响应头。
第六,务必配置带宽封顶。防范恶意攻击、盗链带来流量暴涨,避免产生高额账单;同时开启监控告警,带宽、命中率异常变化及时接收通知。
第七,做好密钥安全管控。CDN的API AccessKey禁止硬编码写进业务代码,优先使用环境变量读取;URL鉴权密钥妥善保管,不要对外泄露。
第八,区分国内和海外流量资源包。资源包国内、海外流量不能互相抵扣,出海业务需要采购对应区域资源包。
第九,源站使用私有对象存储不要修改为公共读。启用CDN私有回源授权,CDN回源自动携带签名,保障存储桶数据安全。
七、总结
CDN内容分发网络,把业务资源下沉部署到遍布各地的边缘节点,有效解决源站带宽压力大、跨地域访问延迟高、突发流量容易打垮源站等一系列业务痛点。精细化缓存管理、刷新预热、灵活的回源配置、HTTPS全链路加密、多层防盗链鉴权防护、规则引擎与边缘脚本自定义能力,搭配完整的监控日志告警体系,可以覆盖绝大多数静态资源分发业务场景。详情👉访问阿里云 CDN 服务平台了解
按量付费、资源包两套计费模式,适配个人测试站点、中小业务、出海企业等不同业务规模。控制台可视化配置、多语言SDK、完整开放API,开发运维人员可以实现自动化发布流程,新版本上线自动调用接口刷新缓存。网站、小程序、APP、音视频点播等各类互联网业务,CDN都是必不可少的边缘分发基础设施。搭配对象存储可以搭建一套高性能、低成本的静态资源分发整体架构,在保障访问速度的前提下,有效控制云上业务的带宽成本。