
静态CDN主要用于分发不经常变化的资源。对于以PHP为后端的应用,通常可以通过CDN加速:静态资源(如CSS、JS、图片、字体)、打包后的资源文件(带hash的静态构建产物),以及在满足条件下的全页缓存或边缘缓存(Edge Cache)。
需要注意的是,原生的PHP动态渲染页面默认会带有个性化内容、会话或Cookie,这类内容不适合直接用静态CDN作为长期缓存对象。要想用静态CDN加速HTML,需要做页面静态化、缓存分层或使用CDN的动态加速特性(如边缘计算、缓存策略与回源配置)。
第一步,区分静态资源与动态内容,把可缓存的文件放到独立域名或子路径(例如static.example.com)。第二步,通过构建工具加上文件指纹(hash命名)确保版本可控。第三步,在后端设置合理的响应头:Cache-Control、Expires、ETag,避免携带不必要的Set-Cookie导致CDN不缓存。
配置来源拉取(origin pull)或推送(push),并设置缓存键(是否包含Query String、Header等)。对动态页面可使用Surrogate-Control、Vary以及边缘回源规则。若使用Cloudflare/Akamai等,启用自动压缩、HTTP/2/3和TLS加速能进一步提升体验。
很多运维同学在配置CDN时直接缓存HTML,结果把登录态或个性化内容缓存下来,造成用户看到别人的数据。解决方式是区分缓存策略或对有Cookie/Authorization的请求设为不缓存。
带有Set-Cookie或Vary: Cookie的响应会触发CDN不缓存,或者产生大量缓存分片。尽量把静态资源托管在不返回Cookie的域名,或使用不同的cookie域策略。
若CDN默认把query string参与缓存键,可能导致缓存命中率极低。对静态资源应忽略无意义参数,对需要参数的接口使用明确规则。
当代码或资源更新时,没有可靠的清理/刷新流程会导致用户长时间拿到旧文件。使用版本化文件名并结合CDN清理API是常见做法。
静态资源跨域加载时缺少CORS头会导致浏览器阻止;同时未正确配置CDN证书或中间证书链会影响HTTPS加载,影响首屏体验。
首先用curl或浏览器开发者工具查看响应头,关注X-Cache / CF-Cache-Status / Age等字段,判断是否命中缓存。其次检查Cache-Control、Expires、Set-Cookie、Vary等头是否正确。
使用CDN提供的日志或控制台(hit/miss ratio、回源流量、响应时延)可以量化效果。针对命中率低的静态资源,检查是否因为URL变化、Query String或请求Header导致缓存键不一致。
模拟并发场景测试缓存穿透:在缓存miss时大量回源请求可能打垮后端,需配置请求排队、stale-while-revalidate或使用锁机制(缓存空值、请求合并)来防护。
应监控缓存命中率、回源带宽、回源请求数、边缘延时、错误率以及首字节时间(TTFB)。异常下降或回源突增通常预示配置问题或缓存失效。
建立自动化的发布与清理流程:前端构建输出带hash的资源、发布后触发CDN清理或使用短期Cache-Control配合版本化。为关键路径设置健康检查与回滚策略。
启用WAF、DDoS防护、速率限制和TLS优化。注意通过CDN做全站加速时,要合理处理敏感路径(登录、支付)不被边缘长期缓存,同时使用Edge-Side Includes(ESI)或AJAX局部渲染解决个性化问题。