对于使用二级目录的网站,选择CDN时最好的方案是支持路径映射和自定义缓存键的专业厂商(例如支持边缘规则与源站回源控制的服务),最佳实践是将静态资源和可缓存页面走边缘缓存、动态请求保留回源;而最便宜的方案常见为免费或低价的反向代理型CDN(如有免费套餐的供应商),适合流量小、预算有限但仍需基础加速与DDoS防护的场景。
问题表现:访问子目录(/sub/)时返回404或资源加载失败。定位思路:检查CDN的路径规则与源站根目录映射是否一致,确认CDN是否在边缘将请求重写到了错误的目录。排错命令示例:使用curl查看响应头(curl -I https://example.com/sub/),关注Location、Cache-Control与自定义头部。
问题表现:修改源站后边缘仍返回旧内容。定位方法:查看响应头中的Cache-Control、Expires以及CDN控制台的TTL配置,确认是否启用了长TTL或忽略源站指令。处理方式:使用CDN的清除(Purge)API、设置合理的短TTL或在版本化URL(例如带?v=时间戳)来强制刷新缓存。
问题表现:用户会话丢失或认证失败。原因通常是CDN默认缓存了应该回源的请求或未转发必要的Cookie/认证头。定位:检查请求是否被缓存(响应头中有X-Cache或类似字段),并确认CDN的缓存键是否包含Cookie或Authorization。解决:配置CDN不缓存带有特定Cookie/路径的请求,或者开启按需回源。
问题表现:浏览器报错SSL或Mixed Content。定位方法:确认CDN边缘是否启用了正确的证书(自托管/托管证书),以及源站是否支持HTTPS。可用openssl s_client或浏览器开发者工具检查证书链。修复包括在源站启用HTTPS、确保CDN与源站之间使用正确的证书协议,和替换页面中的http资源为https。
问题表现:前端请求被阻止,控制台提示CORS。定位:检查源站或CDN是否正确返回了Access-Control-Allow-Origin等头部。注意:有些CDN在缓存时可能移除或修改CORS头,需在CDN边缘规则中显式保留这些头部。
建议保留并分析边缘与源站日志:通过CDN控制台日志、源站访问/错误日志,比对时间线定位404/500频率;结合ping、traceroute、dig/nslookup确认DNS解析链路;使用curl -I/--verbose检查每一步HTTP头部,关注X-Cache、Via、Age等字段,快速判断是边缘命中还是回源产生的问题。
推荐步骤:1)在本地和外网不同节点用curl测试;2)在CDN控制台临时关闭缓存以复现问题;3)逐步回源调试,查看源站日志以确认请求是否到达;4)调整缓存键(路径/查询字符串/Cookie)并使用Purge清空旧缓存;5)验证SSL与CORS头部在边缘和源站一致。
服务器端需确保返回正确的Cache-Control和Vary头,精确控制静态/动态资源的缓存策略;在二级目录部署时,保持URL规范(末尾斜杠、重定向一致),并在服务器(如Nginx/Apache)中配置合适的rewrite和proxy_pass规则,避免CDN与源站增生重复重写导致循环或404。
定位思路为“重现问题→分层排查(DNS→CDN边缘→回源→应用)→调整配置→验证”。常用命令:curl -I/--verbose、dig/nslookup、traceroute、openssl s_client。掌握这些命令与CDN控制台日志结合使用,能快速定位大部分与服务器相关的CDN问题。
