网站加载缓慢,很多人第一反应是服务器配置不足,直接升级CPU内存,花费资金之后页面速度依旧没有改善。问题根源未必在服务器硬件,而是数据传输链路。服务器部署在北京,访问用户在广州,跨运营商、跨骨干网传输,叠加延迟,页面加载耗时轻松突破三秒。CDN就是用来解决链路延迟问题。
简单讲清楚CDN工作逻辑。核心思路,静态资源复制存放至靠近访客的边缘服务器,用户请求图片、CSS、JS文件,就近节点返回资源,不用每次请求都回源站拉取完整文件。整套架构四层组成,源站存放网站原始文件,边缘节点分布国内各城市运营商机房作为缓存服务器,中心节点汇聚流量,调度系统分配用户请求到合适节点。用户访问域名,DNS不再直接返回源站IP,给出CDN专属CNAME地址,请求转发调度系统,系统依据访客地理位置、运营商、节点负载挑选最优缓存节点。访客访问同一个域名,实际获取资源的服务器已经切换到就近节点。

国内使用比较广泛的是阿里云和腾讯云。阿里云国内节点覆盖密度最高,省级全覆盖,平均首包时间低于三十毫秒。腾讯云一线城市节点布局密集,三四线覆盖同样不错,节点总量超过两千个,和微信、游戏生态适配是它的特点。两家都提供新用户免费流量额度,小型站点测试够用。
阿里云CDN配置流程大致如下。登录控制台,CDN产品页面选择添加域名,填入加速域名,例如www.example.com。加速区域选择中国大陆或者全球,取决于访客地域。业务类型根据资源选择图片小文件或者音视频点播。源站信息填写服务器公网IP或者域名。提交域名添加,系统返回CNAME记录,前往域名注册商,修改加速域名解析记录,指向该CNAME。DNS生效后,访客请求优先访问CDN节点,节点存在缓存直接返回资源,缓存缺失才回源获取文件。
腾讯云操作步骤相近。开通CDN服务,域名管理板块新增域名,填写加速域名、源站地址,选定加速区域。腾讯云默认按流量计费,新用户开通时确认计费模式,选择流量或者带宽,运行一段时间之后按需调整。CNAME配置逻辑和阿里云一致,拿到记录值在DNS服务商添加解析。
Cloudflare配置逻辑略有差异,上手操作更简单。注册账号添加站点,输入域名,选择免费套餐。Cloudflare自动扫描现有DNS记录,返回两组nameserver地址,域名注册商修改NS记录等待生效。NS生效之后,DNS记录列表,需要加速的子域名,云朵图标切换为橙色,这一步是开启CDN的关键。橙色代表启用代理CDN,灰色仅DNS解析,不走缓存。很多人配置完成加速无效,大多忘记开启代理云朵。
缓存规则是配置完成后需要微调的部分。CSS、JS、PNG、JPG这类静态文件,缓存周期可以设置较长,一个月甚至更久,这类文件改动频率低。HTML文件缓存时间缩短,一小时左右,业务稳定再酌情延长。API接口和后台路径,/api/、/admin/建议禁止缓存,不然用户提交表单、登录会读取旧缓存内容。
很多人踩过同一个坑,源站文件更新,CDN节点依旧返回旧版本页面。节点缓存未过期,请求持续读取旧缓存文件。解决办法,CDN控制台提交缓存刷新,填入更新文件路径,强制节点缓存失效,下次访问回源拉取最新资源。发布频繁的站点,可以将刷新命令集成部署脚本,上线自动刷新核心文件。HTTPS和HTTP缓存相互独立,如果网站同时启用两种协议,两边缓存都要刷新,或者设置忽略协议缓存共用一份缓存。
HTTPS现在属于网站基础配置,浏览器标记HTTP站点不安全,Chrome对混合内容拦截持续收紧。阿里云腾讯云CDN控制台直接上传SSL证书,部署完成域名支持HTTPS访问。证书部署到节点耗时数分钟到十几分钟,部署完成清理浏览器缓存测试。Cloudflare免费SSL自动签发,不用手动上传证书,SSL/TLS设置推荐Full (Strict)模式,保障Cloudflare到源站链路加密。
容易忽略的细节,CDN回源请求,服务器防火墙可能拦截CDN节点IP。服务器配置安全组或者iptables规则,限制访问IP,需要把服务商回源IP段加入白名单。阿里云腾讯云文档公开回源IP列表,配置安全组时提前查阅。
最后客观说明,CDN不是万能方案,只能加速静态资源,数据库查询、用户登录这类动态请求依旧回源处理。原本访问速度不错的站点,接入CDN感知提升有限。访客分布全国各地,或者服务器部署海外,接入CDN之后页面加载改善很直观。配置步骤看着繁琐,完整操作一遍,域名添加到CNAME生效,半小时到一小时就能搞定。