ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

阿里云CDN配置实战:从CNAME解析到缓存优化

阿里云CDN配置实战:从CNAME解析到缓存优化 如果你搜到这篇文章多半是已经准备给自己的网站域名开 CDN 加速了或者至少被“网站打开慢”“图片加载半天”“用户都在外地甚至海外”这些问题折腾过。阿里云的 CDN 服务我前前后后配过不下二十次从最开始在公司线上环境手忙脚乱地切 CNAME到后来给朋友的小站也顺手配一套整个过程里踩过的坑基本都能背出来了。这篇就把完整的设置流程、每一步背后的原因、以及控制台里那些容易忽略的选项一次性讲清楚按这个顺序操作基本不会出大问题。1. 给域名加 CDN 前先把这三个问题想明白很多人打开 CDN 控制台就开始填域名填完发现 CNAME 不生效或者网站直接 502又回头看文档来回折腾大半天。我的经验是动手之前先花十分钟想清楚下面三件事后面能省下好几个小时的排查时间。1.1 CDN 加速到底解决的是什么问题CDN 的本质是内容分发网络它做的事情通俗讲就是把你的源站内容缓存到离用户更近的节点上。用户在杭州访问一个源站在北京的网站走公网绕一大圈延迟可能要到 40-80ms再加上图片和静态文件这些大体积资源加载体验会明显偏慢。而通过 CDN用户访问的是就近节点的缓存阿里云在全国主要城市都有节点杭州用户可能就直接命中杭州或上海的边缘节点延迟能压到个位数毫秒。但这个机制有一个前提只有能被缓存的内容才有明显的加速效果。页面里的 HTML 如果每次请求都带用户个人信息那没法缓存但图片、CSS、JS 这些静态资源是天然的 CDN 对象。所以想清楚你的网站到底以什么内容为主是配置 CDN 的第一步。1.2 你的业务是静态为主还是动态为主我见过不少朋友把动态接口也丢到 CDN 后面结果缓存命中率极低回源率 90% 以上CDN 反而变成了一层额外的跳板不仅没加速还多了 DNS 解析和节点转发的时间。这里给一个简单的判断标准如果你的站点是博客、企业官网、产品展示页、图片站90% 以上的请求是静态资源那么 CDN 加速的效果会非常明显。如果是论坛、电商购物车、后台管理系统动态请求占比高建议只对静态资源子域名比如 static.example.com、img.example.com开启 CDN主域名保持直连源站。如果确实需要全站加速阿里云有DCDN全站加速产品它针对动态请求做了链路优化不过配置思路和纯 CDN 不完全一样。1.3 CDN 在整体架构里的位置在配置之前脑子里要有这样一条完整的链路图用户浏览器 → 本地 DNS → CDN 调度系统返回最优节点 IP → CDN 边缘节点缓存命中则直接返回内容 → 未命中则回源 → 源站服务器ECS/OSS/ 负载均衡这条链路里域名解析权威服务器上配置 CNAME 记录指向 CDN 分配的域名是整个接入过程的关键动作。很多人把这个理解和普通的 A 记录混在一起后面配置时就容易糊涂。记住一点CDN 模式下的访客到源站之间多了一层 CDN 节点用户访问的 IP 不再是源站 IP而是 CDN 节点的 IP。2. 前置条件准备备案、源站、证书缺一不可配置 CDN 本身不难难的是前置条件没到位导致流程卡住。尤其是国内节点备案问题能直接卡掉一半的人。2.1 域名备案与 DNS 托管确认阿里云 CDN 的中国大陆节点要求域名完成 ICP 备案这是硬性规定。如果域名还没备案有两种选择先走备案流程备案通过后再配置 CDN这个过程通常需要 1-2 周。如果你的用户群体主要在海外可以只开通海外节点或者使用中国香港地区节点这样可以跳过备案但相应的访问速度对大陆用户就没那么友好。另外一个容易被忽略的点是 DNS 托管位置。CDN 配置完成后需要修改域名的 CNAME 记录所以域名解析必须在某个 DNS 服务商处可管理。如果你的域名在阿里云注册解析默认在阿里云云解析 DNS这个最省事如果域名从其他服务商转入或者注册在其他平台只要能在对应平台添加 CNAME 记录也可以用。只不过阿里云 CDN 和云解析同属一家控制台之间跳转更顺畅排查问题也方便一些。2.2 源站怎么选ECS、OSS、负载均衡源站是 CDN 回源时去拉取内容的服务器阿里云 CDN 支持三种常见的源站类型OSS 源站适合纯静态站点比如图片、视频、打包文件OSS 自带高可用不用担心源站挂掉而且回源流量费用便宜。ECS 源站适合跑着完整应用的站点API、动态页面、数据库交互都在这台机器上灵活度最高。SLB 负载均衡源站源站有多台 ECS 时使用CDN 回源会先走负载均衡再由负载均衡分发到不同 ECS避免单点压力。我个人的建议是如果是新站点或者以静态内容为主直接用 OSS 源站省心很多。如果是已经在跑的网站ECS 源站最直观因为不用改业务代码只需要在 CDN 后台填上 ECS 的公网 IP 即可。2.3 HTTPS 证书的申请与托管现在主流浏览器对没有 HTTPS 的网站已经有明显的警告提示所以配置 CDN 时基本上必须顺手把证书挂上。阿里云 CDN 的证书管理支持两种方式在数字证书管理服务里申请免费证书单域名证书有效期 3 个月到期前有自动续期提醒。上传自己的证书如果域名在其他平台买过商业证书或者使用了 Lets Encrypt 这类工具生成的证书。配置 CDN 之前先确保手头有可用的证书尤其是首次配置时免得 CDN 已经生效但 HTTPS 没配好导致用户看到证书错误体验反而更差。免费证书申请很快在控制台点几下验证域名归属权后通常几分钟内就能签发。3. 阿里云 CDN 控制台添加域名一步步操作前置准备做完之后就可以进入正题了。登录阿里云 CDN 控制台在域名管理页面点击添加域名接下来每一步我都会说明为什么这么填。3.1 添加加速域名与业务类型加速域名就是你打算走 CDN 的那个域名。这里有一个非常容易犯的错误想加速整个网站就直接填 example.com。但实际业务中更推荐使用子域名比如 www.example.com、static.example.com、img.example.com。原因有几个加速域名和源站域名不能相同如果你只有一个主域名可以用 www 子域名加速主站页面API 走 api.example.com 单独解析到源站。子域名粒度更细后续可以针对不同业务配置不同的缓存策略。万一某个子域名业务下线删除 CDN 配置不会影响主域名的其他解析和服务。业务类型一栏有图片小文件、大文件下载、视音频点播等选项这个决定了 CDN 默认的缓存策略和节点资源调度需要按实际业务场景选。如果拿不准个人网站选图片小文件即可它覆盖了 HTML、CSS、JS、图片这些最常见的静态资源。3.2 源站配置的两种核心形式添加域名后下一步是配置源站信息。阿里云 CDN 的回源配置支持两种主流形式IP 源站直接把 Origin Server 的 IP 地址填进去适合 ECS 这种固定公网 IP 的场景。OSS 域名源站选择你的 OSS Bucket 域名阿里云会自动识别并校验归属权防止别人恶意把你的 OSS 配到别人的 CDN 下。如果源站是 ECS需要特别注意Host 头这个概念。你在 CDN 上添加的加速域名假设是 static.example.com源站 IP 是 1.2.3.4那么 CDN 回源时 HTTP 请求头里的 Host 默认是 static.example.com。如果你的 ECS 上 Nginx 配置的 server_name 只写了 example.com没有匹配 static.example.com就会导致回源失败或返回 403。一个稳妥的做法是回源 Host 填写源站上真实存在的域名而源站服务器上确认对应的 server_name 存在。比如 Nginx 配置里加一个 server_name example.com static.example.com;两个域名都指向同一个站点目录问题就解决了。3.3 端口与回源协议的选择默认情况下HTTP 回源使用 80 端口HTTPS 回源使用 443 端口。如果你的源站跑的不是标准端口比如 8080需要在源站信息里明确填写端口号。这里有个细节HTTPS 回源时源站必须正确配置证书且证书信任链完整否则回源会反复报 SSL 错误。回源协议有 HTTP、HTTPS、跟随Fllow三种模式如果源站是 OSS建议直接 HTTPS 回源OSS 默认支持。如果源站是 ECS且 Nginx 上已经部署了证书同样建议 HTTPS 回源保证整条链路加密。如果源站没配证书只能 HTTP 回源。这种情况下CDN 边缘节点到用户用的是 HTTPS用户侧体验没问题但源站到 CDN 这一段是明文内网一般问题不大公网环境建议尽早升级。我自己通常选择跟随模式让 CDN 根据用户请求的协议自动决定回源协议逻辑更省心。4. CNAME 解析切换最容易卡住的环节域名添加完成、CDN 分配了 CNAME 地址之后真正的割接动作才开始。这个环节是大部分人第一次配置时最容易迷茫的地方。4.1 在 DNS 控制台添加 CNAME 记录CDN 控制台的域名列表里每个加速域名都会生成一个 CNAME 地址形如 example.com.w.cdngslb.com。你需要去域名解析服务商那里把加速域名的解析类型从 A 记录改成 CNAME 记录。操作步骤进入云解析 DNS 控制台或其他 DNS 服务商平台。找到对应的域名添加一条解析记录。记录类型选CNAME主机记录填写加速域名的前缀比如加速域名是 static.example.com主机记录就填 static。记录值填写 CDN 控制台分配的 CNAME 地址。TTL 可以先保持默认生效后可以适当调大。这里有一个必须注意的冲突同一个主机记录不能同时存在 A 记录和 CNAME 记录。如果你之前的 static.example.com 已经有一条 A 记录指向源站 IP需要先删除它再添加 CNAME。这会导致一小段时间内该子域名的解析为空所以建议在低峰期操作。4.2 解析不生效的排查清单改了 CNAME 之后等待解析生效的时间可能从几分钟到几小时不等取决于 DNS 服务商的 TTL 和各地 Local DNS 的缓存情况。在这个阶段常见的现象是有的地区已经走 CDN有的地区还在访问源站这是正常的。但如果过了很久某些地区一直解析不到可以按这个顺序排查确认 CNAME 记录值是否完整阿里云分配的地址有时包含结尾的句点填写时注意不要漏字符。确认是否同时存在其他冲突记录比如又加了一条 A 记录指向源站。在本地用nslookup命令查询nslookup static.example.com返回的解析值是否已经变成 CNAME 地址。检查 CDN 控制台域名状态如果是配置中状态CNAME 不生效是正常的配置完成后状态会变成正常运行。4.3 业务割接的稳妥顺序直接改 CNAME 对线上业务有一定风险因为切换过程 DNS 缓存导致的不确定性。我建议的稳妥方案是先在本地 hosts 文件里手动把加速域名指向 CDN 节点 IP验证整条链路正常。然后去 DNS 控制台删除 A 记录添加 CNAME 记录。最后在 CDN 控制台确认域名状态为正常运行再通过实时日志检查是否有回源异常。如果你对 DNS 切换没有信心也可以用阿里云的灰度回源功能逐步切流量不过个人站点一般用不上按上面的流程操作足够了。5. HTTPS 证书配置与 HTTP/2 加速CDN 生效后最优先的后续配置一定是 HTTPS。没有证书保护的情况下用户在地址栏能看到不安全的提示这对个人博客和商业站点的信任度打击都很大。5.1 证书配置的两种方式在 CDN 控制台的HTTPS 配置页面你可以选择上传证书或选择已有证书。我的经验是如果你的域名在阿里云数字证书管理服务里申请了免费证书控制台会自动关联直接选中即可。如果你是手动生成的证书比如用 acme.sh 签发的 Lets Encrypt 证书需要将证书内容和私钥内容分别粘贴到对应输入框。需要注意粘贴私钥时内容必须包含-----BEGIN RSA PRIVATE KEY-----这类完整的头尾标记中间不能有缺失或额外字符。如果你的证书是 Nginx 格式.pem和私钥.key直接用文本编辑器打开后完整复制即可。5.2 强制 HTTPS 与强制跳转的注意事项开启 HTTPS 后控制台会提供强制 HTTPS选项我建议开启。它表示用户通过 HTTP 访问时CDN 会返回 301 跳转到 HTTPS。但这里有一个坑如果你的源站有一部分接口或资源仅支持 HTTP比如某些老旧的第三方接口回调强跳会让这些请求直接失效。解决办法在开启强制 HTTPS 之前先确认站点内所有资源都通过相对路径或绝对 HTTPS 路径加载不要出现硬编码的 http:// 链接。最简单的方法就是在浏览器开发者工具里看一下 Network 面板有没有Mixed Content报错。如果有先把代码里的 http 链接改为 https 或相对路径再开强跳。5.3 HTTP/2 开启后的效果同一页面下开启 HTTP/2 之后浏览器可以复用一条 TCP 连接并发请求多个资源配合 CDN 节点整体加载速度提升非常明显。阿里云 CDN 的 HTTP/2 配置入口在HTTPS 配置页面下方开启的前提是 HTTPS 已经配置完成。开启后可以顺手测试一下curl -sI https://static.example.com/js/app.js --http2如果返回的头部里有HTTP/2 200说明 CDN 节点已经用 HTTP/2 响应了。需要注意的是HTTP/2 需要用支持该协议的客户端测试部分老系统可能显示为 HTTP/1.1这是正常的兼容回退。6. 缓存配置TTL 策略、刷新与预热CDN 配完解析也生效了但加速效果好不好很大程度上取决于缓存策略设置得对不对。缓存配置这块我见过太多人直接保持默认结果缓存命中率低得可怜然后又回过头怀疑 CDN 没用。6.1 缓存 TTL 怎么设置才合理阿里云 CDN 的缓存配置支持两种粒度目录和文件后缀。系统默认会有一些预设但远远不够一定要根据自己的站点结构调整。一个比较通用的设置方案资源类型路径/后缀缓存时长TTLHTML 页面.html, .htm不缓存或 120 秒图片.jpg, .png, .gif, .webp30 天CSS.css7 天JS.js7 天字体文件.woff, .woff2, .ttf30 天音视频.mp4, .mp3根据更新频率HTML 不建议设置太长缓存因为页面本身经常变化而且 HTML 一旦缓存里面引用的 JS/CSS 文件名即使更新了用户拿到的还是旧版本的 HTML就看不到新内容了。JS 和 CSS 可以配合文件名带版本号比如 app-20250101.js的方式把 TTL 拉长到 7 天以上既保证缓存命中率又能在发版时通过新文件名强制 CDN 重新拉取。如果源站代码里已经设置了Cache-Control响应头CDN 默认会遵循源站指令这里可以选择优先遵循源站或CDN 控制台配置优先一般选控制台优先级更高更可控。6.2 刷新与预热的区别、限额与操作时机缓存策略再合理业务上线后仍然会遇到内容更新了但 CDN 还拿着旧缓存的问题。这时候就用到 CDN 的刷新和预热功能。刷新是把 CDN 节点上的缓存主动失效下一次访问会重新回源拉取最新内容。适合发布新文章、修改图片、调整页面样式这些场景。预热是在内容还没被用户访问时主动让 CDN 节点去源站拉取内容缓存起来。适合大文件、重要图片上线前提前把内容分布到各节点。操作上刷新更常用。比如博客更新了一篇文章对应的 HTML 页面改动了你可以直接在控制台发起 URL 刷新输入页面的完整链接几分钟内全国节点都会失效旧缓存。如果文章里还换了封面图也可以直接把图片的 URL 一并刷新。需要注意刷新和预热都有配额限制个人账号下 URL 刷新每日有几千条的额度目录刷新的条数更少一些。日常使用完全够但要避免用刷新目录这种粗暴方式尽量精确到 URL既能快速生效又不浪费配额。6.3 缓存命中率的解读CDN 控制台的缓存命中率指标是衡量配置效果的核心数据。命中率越高说明用户请求在边缘节点就被直接响应了回源压力小访问速度也越快。静态站点的命中率正常应该在 90% 以上如果长期低于 80%大概率是以下原因HTML 页面没设缓存或 TTL 太短导致每次访问都回源。动态请求混在加速域名下URL 里带问号参数且每次参数不同CDN 无法命中。缓存刷新过于频繁把有用的缓存也一起失效了。针对带参数的 URL可以在缓存配置里设置忽略参数让 CDN 忽略 URL 中的查询字符串进行缓存匹配。但这个选项要看业务场景如果参数包含用户身份的 token那不能忽略否则会出现串号问题。7. 实测验证与回源排错配置完成后不能只看控制台状态是正常运行就收工。用真实请求测一遍确认链路通了缓存生效了才算真正完成。7.1 用 curl 命令验证 CDN 链路我常用的验证命令是这样curl -sI https://static.example.com/js/app.js重点看返回头里是否有Via字段正常情况下会显示类似Via: cache57.l2cn3058的信息这表示请求确实经过了 CDN 节点。还有一个X-Cache字段显示HIT表示命中 CDN 缓存MISS表示未命中需要回源。两次请求如果都是MISS说明缓存策略没有生效回到上一节检查 TTL 配置。如果第一次是MISS、第二次变HIT这是正常情况因为第一次回源缓存后后续请求就命中了。7.2 403、502、命中率低的定位思路配置过程中最常见的两个报错是 403 和 502。403 错误通常与源站配置有关源站 Nginx 的 IP 白名单把 CDN 回源 IP 挡掉了需要在源站放行阿里云 CDN 的回源 IP 段。OSS 源站没有开启 CDN 回源授权需要进入 OSS 控制台开启回源阿里云 CDN的授权选项。源站开启了防盗链CDN 回源的 Referer 头被拦截。502 错误则代表 CDN 节点无法正常从源站获取内容源站服务没有正常运行进程挂了或者负载过高导致响应超时。回源 Host 和源站服务器的虚拟主机配置不匹配源站不知道该返回哪个站点的内容。源站的防火墙拦截了 CDN 节点的回源请求。遇到这些错误排查思路是一致的先绕过 CDN直接请求源站在本地绑定 hosts 把域名解析到源站 IP 试一次。如果源站直接访问正常问题就在 CDN 的源站配置上如果源站本身也异常先修源站。8. 上线后的进阶优化CDN 正常工作之后想要更进一步还有一些实用优化可以顺手做了。这些属于锦上添花但长期来说省心省力。8.1 带宽封顶、Range 回源与页面优化带宽封顶是一个容易被忽略的保护功能。如果你的站点突然被刷流量恶意刷量、热门文章导致高并发CDN 费用可能迅速飙升。在用量管理里设置带宽上限当带宽超过阈值时可以选择访问切换到源站或直接返回 429来止损。个人站点强烈建议开启哪怕余额不多也能防一手。Range 回源适合大文件场景。用户请求一个 1GB 的视频通过 Range 回源CDN 只向源站请求实际需要的分片而不是从源站拉完整文件能大大降低源站压力也支持视频播放的拖动进度功能。如果源站是 Nginx默认支持 Range开启后即可生效。页面优化是 CDN 控制台的一键压缩选项主要包括 HTML/CSS/JS 的 Gzip 压缩。开启后CDN 边缘节点会压缩后再返回给支持压缩的浏览器。但要注意如果源站已经压过一遍CDN 的页面优化可以保持关闭避免双重压缩浪费 CPU 还影响效率。8.2 安全防护配置CDN 控制台里还有一个安全防护相关的配置入口。基础的可以配置 Referer 防盗链防止别人网站直接引用你的图片资源刷流量。更高级的防护如 WAF 规则、CC 攻击防护是阿里云 CDN 的增值服务需要单独开通。个人站点一般用不到全套 WAF但可以考虑配置一条IP 黑名单如果某个 IP 段在访问日志里明显异常比如短时间内请求量极高可以直接封掉。除此之外建议在控制台开启实时日志或离线日志功能把 CDN 的访问日志留存下来。以后想分析热门内容、排查异常访问、统计各地域用户分布都靠这些日志。日志默认保存在 OSS 上会有一点点存储费用但非常值得。到这里阿里云 CDN 从原理、配置、切解析、证书、缓存到排错、优化的一整套流程就跑通了。整个过程下来最深的体会是CDN 配置本身不复杂大部分问题都出在 DNS 切换顺序和回源配置不一致上只要在动手前把源站类型、缓存策略、证书这三件事想清楚实际操作基本半小时内能完成。配置好之后网站的响应速度提升是能明显感知到的之前三秒都打不开的图片切完 CDN 基本秒开后期的运维压力也小了很多。
返回列表