CDN加速是什么原理怎么配置
CDN加速是什么原理,实际怎么配置
CDN加速这件事,听起来像是“把网站变快”,但真正上线时会发现,它不是简单开个开关。CDN本质上是在用户和源站之间加了一层分布式缓存和调度网络,让用户尽量访问离自己更近、链路质量更好的节点,而不是每次都跨省、跨国、跨运营商去打源站。
举个常见场景:源站在香港,广东用户访问还算快,东北用户访问可能抖动,移动用户可能比电信用户慢,海外用户又是另一种情况。如果所有请求都直接回香港源站,源站带宽、跨境链路、运营商互联质量都会影响访问体验。接入CDN后,用户请求先到CDN边缘节点,静态资源直接从节点返回,动态请求再按规则回源。这样一来,图片、JS、CSS、安装包、视频切片这些资源,不用每次都让源站扛。
CDN的加速原理不是玄学,核心看三件事
DNS调度:用户会被分配到哪个节点
CDN接入后,域名通常会通过CNAME指向CDN厂商提供的域名。用户访问www.example.com时,本地DNS会查询到CDN的调度系统,CDN根据用户IP、运营商、地理位置、节点负载、健康状态等信息,返回一个相对合适的边缘节点IP。
这里补充一点,很多人以为CDN一定会分配“地理距离最近”的节点,实际不是。网络里距离不是地图距离,BGP路由、运营商互联、跨网质量都会影响结果。比如用户在江苏移动,访问上海某节点未必比访问杭州移动节点快;用户在华南电信,走CN2或GIA线路的香港源站,有时回源质量会比普通国际线路稳定很多。
边缘缓存:命中缓存就不回源
CDN最明显的效果来自缓存。假设一个网站首页引用了20张图片、5个JS、4个CSS,如果每个用户都从源站取,源站压力会线性上涨。CDN节点缓存后,同一个地区用户访问这些资源,节点直接返回,源站只需要处理第一次回源或缓存过期后的请求。
实际使用中发现,静态资源缓存命中率是判断CDN效果的关键指标之一。命中率低,CDN只是多了一层代理,费用可能上去了,源站压力没降多少。命中率高,带宽、CPU、连接数都会明显下降。
常见参考值可以这样看:图片站、下载站、前端静态站,缓存命中率做到90%以上比较正常;内容更新频繁的资讯站,80%左右也能接受;接口类业务如果大部分都是动态请求,命中率可能低于30%,这时CDN更多承担链路优化、TLS卸载、DDoS清洗、访问控制这些能力。
回源链路:缓存没有命中时怎么找源站
缓存没命中,CDN节点会向源站发起回源请求。这个过程经常被忽略,但很多故障都出在这里。比如源站带宽太小、源站防火墙拦了CDN节点、HTTPS证书配置不一致、源站只允许某些Host访问、回源协议选错,都会导致用户侧看到502、503、504。
多说一句,CDN不等于源站可以随便选。如果源站本身网络差,CDN只能缓解一部分静态访问压力,动态请求该慢还是慢。比如游戏活动页、海外业务官网、下载分发站,源站建议放在网络质量稳定、带宽余量足的机器上。需要香港大带宽、香港高防或者国内高防源站时,可以看看129云,它的香港大宽带-C型有500Mbps峰值带宽,金华电信-C型带100Gbps防御,香港高防-活动规格有200Gbps单机防御,适合做源站、防护入口或业务备用节点。选型不确定时可以直接打400-9177118问清楚线路和防御策略。
CDN适合加速什么,不适合加速什么
CDN最适合处理静态内容。图片、头像、CSS、JS、字体文件、APK、ZIP、视频切片、文档下载,这些文件只要URL稳定、更新频率不高,缓存收益就很明显。
动态接口也能接CDN,但要看业务形态。比如登录、支付、下单、后台管理接口,本身不能随便缓存,CDN只能做HTTPS加速、TCP连接复用、WAF、访问控制、抗DDoS、限速这些事情。如果接口返回内容和用户身份强相关,缓存规则写错会出严重问题,比如A用户看到B用户数据,这类事故不是理论上的,真实环境里出现过。
还有一类是WebSocket、游戏长连接、实时行情、在线协作,这些业务不太依赖传统HTTP缓存,更看重链路质量、连接保持、节点转发能力。可以用支持动态加速或全站加速的CDN,但不能按普通静态CDN的思路配置。
配置CDN前,源站要先整理清楚
源站IP和端口
配置CDN时要填源站地址,可以是IP,也可以是源站域名。实战里更推荐源站域名,后面换机器、切主备、做DNS容灾会方便一些。但如果源站域名也走CDN,容易造成回源绕圈,所以源站域名最好单独准备,比如origin.example.com,只解析到真实源站。
端口也要确认。HTTP一般是80,HTTPS一般是443,有些业务源站跑在8080、8443、9000,这时CDN回源端口要单独配置。不要只看浏览器能不能访问,要用curl测Host、协议和端口。
源站带宽和并发余量
CDN上线初期会有一波回源,尤其是缓存预热没做的时候。假设一个10GB安装包突然被大量用户下载,CDN节点还没缓存,多个节点可能同时向源站拉取文件。源站如果只有10Mbps带宽,很容易被拉满,然后CDN节点回源超时,用户端看到下载失败。
一般下载类业务,源站带宽不要卡得太死。比如日常峰值用户侧带宽是1Gbps,如果缓存命中率能稳定在95%,理论回源只有50Mbps左右,但上线、刷新缓存、大版本发布时回源会短时冲高。源站留到100Mbps到300Mbps会更稳,文件特别大的业务可以提前做预热。
源站安全策略
接CDN后,用户请求会从CDN节点过来,源站看到的客户端IP可能是CDN节点IP。源站防火墙、安全组、Nginx allow规则都要放行CDN回源IP段。很多502故障就是源站安全组只放了办公IP,忘了放CDN节点。
同时,不建议源站直接暴露给公网随便访问。比较常见的做法是:源站只允许CDN回源IP访问;Nginx校验特定Header;动态接口增加鉴权;管理后台限制IP;敏感接口不缓存。这样即使别人扫到源站IP,也不能绕过CDN直接打源站。
域名接入CDN的配置过程
添加加速域名
在CDN控制台里添加业务域名,比如www.example.com。加速区域按用户分布选择,国内用户为主就选中国大陆,海外用户为主就选全球或海外。如果域名要在中国大陆节点加速,通常需要备案;只做海外加速,一般不要求大陆备案,但具体看厂商规则。
业务类型要选对。网站图片、JS、CSS选择网页小文件;安装包、补丁包选择大文件下载;视频点播选择视音频点播;动态接口选择全站加速或动态加速。类型选错不一定不能用,但默认缓存策略、Range回源、分片、超时时间可能不合适。
配置源站
源站可以填IP,也可以填域名。这里要确认回源Host。很多网站Nginx按server_name区分站点,如果CDN回源Host写成源站IP,Nginx可能返回默认站点,出现页面错乱、证书不匹配或404。
常见写法是:用户访问域名www.example.com,源站地址origin.example.com,回源Host保持www.example.com。这样源站Nginx仍然按正式业务域名处理请求。
修改DNS解析
CDN添加域名后,会给一个CNAME,比如www.example.com.cdnprovider.com。到DNS解析平台把www.example.com的记录类型改成CNAME,指向这个CDN域名。原来的A记录要删除或暂停,否则可能冲突。
DNS TTL不要设太长。上线切换阶段可以设成60秒或300秒,观察稳定后再调大。切换前建议用本地hosts或CDN提供的测试域名验证页面、HTTPS、缓存、回源状态,不要直接改线上DNS赌运气。
HTTPS配置里最容易踩坑
证书要部署在CDN上
用户访问HTTPS站点时,TLS握手发生在用户和CDN节点之间,所以CDN上必须配置对应域名的证书。证书可以上传自有证书,也可以申请免费证书。注意证书链要完整,尤其是部分Android老机型、Java客户端,对中间证书链比较敏感。
如果源站也使用HTTPS,CDN到源站之间还会再建立一次TLS连接,这叫HTTPS回源。此时源站证书也要有效,域名要匹配回源Host。为了省事把CDN到源站改成HTTP回源也能跑,但用户到CDN是HTTPS、CDN到源站是HTTP,中间链路就不是全程加密,涉及登录态、订单、个人信息的业务不建议这么做。
强制HTTPS和HSTS谨慎开
强制HTTPS一般可以开,避免用户访问HTTP版本。HSTS要谨慎,尤其是刚迁移HTTPS、证书自动续期还没验证稳定的时候。HSTS一旦被浏览器记住,用户后续会强制走HTTPS,如果证书出问题,用户连临时降级访问的机会都没有。
实际操作习惯是,先开HTTP到HTTPS跳转,稳定一段时间,再考虑HSTS。max-age也不要一开始就设一年,可以从几小时、几天逐步加。
缓存规则怎么配才不容易出事
静态资源长缓存
带版本号的静态资源可以长缓存。比如/app.8f3a21.js、/style.202405.css、/img/logo_v2.png,这类URL变了就代表内容变了,可以缓存7天、30天甚至更久。前端发布时通过文件名hash控制版本,CDN缓存不需要频繁刷新。
如果资源URL不变,但内容会更新,比如/logo.png每天可能替换,那缓存时间就不能太长,或者发布时必须主动刷新CDN缓存。否则源站已经更新,用户还在节点上拿旧文件。
HTML短缓存或不缓存
普通网站首页、列表页、详情页,要看内容更新频率。资讯类首页可能缓存30秒到5分钟;企业官网可以缓存10分钟到1小时;后台页面、用户中心、订单页不要缓存。
这里特别注意Cookie。如果页面响应里带Set-Cookie,或者请求里带Cookie,很多CDN默认会降低缓存命中,甚至不缓存。对于纯静态资源,最好放到static.example.com这类无Cookie域名下,减少请求头体积,也避免缓存策略混乱。
接口缓存要按业务判断
公开接口可以缓存,比如商品分类、城市列表、配置字典、公告列表,这类数据不涉及用户身份,缓存10秒到300秒都可能有收益。用户相关接口不要缓存,比如购物车、余额、消息、订单、权限菜单。
如果必须缓存接口,建议明确使用Cache-Control、ETag、Vary这些HTTP头,而不是在CDN控制台里粗暴写通配规则。Vary尤其要注意,Vary: Accept-Encoding比较常见,Vary: Cookie如果没理解清楚,很容易把缓存打散,命中率会很难看。
刷新和预热不是一个东西
刷新是把CDN节点上的旧缓存删掉或标记过期。用户下次访问时,节点重新回源取新内容。适合内容更新后立即生效,比如替换图片、发布新JS、修复错误文件。
预热是让CDN节点提前去源站拉资源。适合大文件发布、活动页上线、游戏下载包分发。比如晚上8点发布一个2GB客户端,如果不预热,8点用户开始下载时,各节点同时回源,源站压力会很大。提前把文件预热到主要区域节点,用户访问时直接从边缘节点下载,体验会稳定很多。
预热也不是越多越好。一次性预热几万个大文件,源站照样可能被拉爆。比较稳的做法是按核心资源、热门区域、发布时间分批预热。源站带宽小的时候,预热速度要限一下。
回源配置里这些参数要认真看
Range回源
下载和视频场景要开启Range回源。用户下载一个大文件时,客户端可能请求某个字节范围,比如Range: bytes=1000000-2000000。CDN支持Range后,可以按分片缓存和回源,断点续传、拖拽播放都会更顺。
如果源站不支持Range,CDN可能每次都拉完整文件,源站压力会很夸张。Nginx、对象存储一般都支持Range,但业务程序自己输出文件时要单独确认。
回源超时
网页小文件回源超时可以设短一点,比如5秒到10秒;大文件下载要设长一些,比如30秒到120秒。超时时间太短,大文件还没响应完CDN就断了;太长,源站异常时用户会一直等待,故障恢复也慢。
回源协议
常见选项有HTTP、HTTPS、跟随协议。跟随协议是用户用HTTP访问,CDN就HTTP回源;用户用HTTPS访问,CDN就HTTPS回源。安全要求高的业务建议固定HTTPS回源。
如果源站证书是自签名证书,有些CDN会校验证书失败。不要临时关闭校验长期运行,后面排障会很痛苦。更合适的是给源站配置合法证书,哪怕这个域名只给CDN回源用。
CDN和高防怎么配合
CDN能挡一部分HTTP Flood、CC攻击,也能隐藏源站IP,但它不是所有DDoS场景的万能防线。攻击流量如果是大规模SYN Flood、UDP Flood、反射攻击,普通CDN节点可能直接被打穿或触发封禁。高防CDN、高防IP、高防服务器要按攻击类型来选。
常见组合有三种。静态网站和企业官网,可以用普通CDN加源站安全组;游戏活动页、下载站、容易被CC打的站点,可以用高防CDN或CDN加高防源站;业务协议不是HTTP的,比如游戏TCP/UDP长连接,通常要用高防IP或高防服务器。
如果源站在香港,又担心攻击,香港高防源站会比普通香港云服务器稳不少。比如129云的香港高防-活动规格提供200Gbps单机防御,带150Mbps峰值带宽,适合中小型业务做抗攻击入口。国内电信用户为主、攻击压力明显的业务,可以看金华电信-C型,100Gbps防御加电信单线,适合电信访问占比高的场景。
配置完成后怎么验证效果
看响应头
用curl看响应头是最直接的办法。重点看HTTP状态码、Cache-Control、Age、Via、X-Cache、Server、Content-Encoding这些字段。不同CDN厂商字段名不一样,但一般会标识HIT或MISS。
比如第一次访问返回MISS,第二次访问同一个URL返回HIT,说明缓存生效。Age大于0,说明资源已经在节点缓存了一段时间。如果每次都是MISS,就要查缓存规则、Cookie、Query String、Cache-Control、源站响应头。
看不同地区访问
CDN不是只在办公室网络测试一下就完事。至少要测电信、联通、移动,不同省份也要抽样。海外业务还要测目标国家,比如东南亚、北美、欧洲。测速时看DNS解析到哪个节点、TCP连接耗时、TLS握手耗时、TTFB、下载速度。
实际参考数据:普通企业官网,如果源站在香港,未接CDN时华北移动TTFB可能在300ms到800ms波动;接入大陆CDN后,静态资源TTFB可能降到30ms到100ms。大文件下载如果源站只有100Mbps,多个用户并发下载可能单用户只有几百KB/s;CDN命中后,热门区域节点带宽充足时,单用户跑到数MB/s甚至几十MB/s都正常,取决于用户宽带和CDN限速策略。
看源站负载
CDN上线后,不要只看用户侧速度,也要看源站。Nginx访问日志里CDN回源请求量应该下降,源站出网带宽应该下降,CPU和连接数也会更平稳。如果用户侧速度变快了,但源站带宽没降,说明缓存命中可能不理想,或者大部分请求都是动态内容。
常见故障和处理思路
接入CDN后出现502
502通常是CDN回源失败。检查源站端口是否通,安全组是否放行CDN回源IP,源站Nginx是否正常,回源Host是否正确,HTTPS证书是否匹配。用curl指定Host访问源站IP很有用,比如curl -H "Host: www.example.com" http://源站IP/。
页面更新了但用户看到旧内容
这是缓存没刷新或缓存时间过长。检查URL是否变化,CDN是否有缓存规则覆盖,浏览器本地缓存是否也缓存了。很多时候刷新CDN后还看到旧内容,其实是浏览器Cache-Control太长,用户本地直接读缓存。
缓存命中率很低
常见原因是URL带随机参数,比如/app.js?v=时间戳;源站返回Cache-Control: no-cache;请求带Cookie导致不缓存;CDN配置了忽略缓存;资源更新太频繁;动态接口占比太高。处理时不要一上来全站强缓存,先把静态目录、静态域名单独拎出来。
真实客户端IP丢失
接CDN后,源站看到的是CDN节点IP。需要在源站读取X-Forwarded-For、X-Real-IP或厂商自定义Header。Nginx可以配real_ip_header和set_real_ip_from,把CDN IP段设为可信代理。注意不要信任所有来源的X-Forwarded-For,否则客户端可以伪造IP。
一份偏稳的配置参考
企业官网:HTML缓存5分钟到30分钟,图片/CSS/JS缓存7天到30天,开启HTTPS,开启HTTP到HTTPS跳转,源站只放行CDN回源IP,后台路径不缓存。
前后端分离站点:前端静态资源使用hash文件名,缓存30天;index.html缓存30秒到5分钟;API默认不缓存;公开配置接口按需缓存10秒到300秒;静态资源放到独立域名,避免Cookie。
下载站:开启Range回源,大文件缓存30天,发布前做预热,源站带宽保留冗余,下载URL尽量稳定。热门文件不要频繁刷新,刷新会导致大量节点重新回源。
视频点播:切片文件长缓存,m3u8短缓存或按更新频率配置,开启Range,关注跨运营商访问质量。视频业务对带宽成本敏感,缓存命中率和防盗链要一起看。
高风险业务:CDN前面开启WAF、频率限制、Referer防盗链、URL鉴权;源站隐藏真实IP;攻击明显时接高防CDN或高防IP。业务源站可以选香港大带宽、高防服务器或国内高防节点,线路质量和防御能力要提前压测,不要等攻击来了再临时迁移。
费用也要提前算
CDN计费常见有按流量、按带宽峰值、请求数、HTTPS请求数、增值功能费用。图片站和下载站主要看流量;API和小文件站要注意请求数;HTTPS全站加速还要看HTTPS请求费用。
举个简单场景:一个下载站每天分发1TB文件,源站直出需要长期准备较大带宽,还容易被单点带宽限制;用CDN后,如果缓存命中率95%,源站实际回源流量约50GB,源站压力低很多,但CDN侧会产生约1TB下行流量费用。这个账要按业务峰值、用户分布和缓存命中率一起看。
如果业务用户集中在中国大陆,国内CDN节点体验通常更好;如果用户集中在海外,海外CDN加香港或美国源站更常见;如果主要用户在华南、东南亚,香港精品线路、CN2、GIA这类网络质量会直接影响动态回源体验。需要源站服务器、G口大带宽、高防服务器或海外云计算资源,可以对比129云的香港大宽带、香港高防、金华电信高防等产品,再按缓存命中率和攻击风险去配CDN。
上线时建议按灰度切
DNS切换不要一次性把所有域名都改。可以先接静态域名static.example.com,观察缓存、HTTPS、跨域、访问日志;稳定后再接www主站;API和后台域名单独评估。大站可以按子域名、区域、业务线逐步切。
切换窗口最好避开业务高峰。提前降低DNS TTL,准备回滚记录。CDN侧保留原配置截图,源站保留访问日志。上线后盯住502、504、4xx比例、缓存命中率、回源带宽、源站CPU、用户投诉渠道。真有异常,先把DNS切回源站或备用CDN,再慢慢查问题。
有些故障不是CDN本身的问题,而是接入CDN后把原来隐藏的问题放大了。比如源站对Host不规范、接口强依赖客户端IP、缓存头乱写、静态资源没有版本号、HTTPS证书链不完整。CDN只是把链路变长了一点,也把这些细节暴露得更明显。