1) 明确目标:将台湾用户的首屏时间(TTFB)、资源加载时间降低到可接受范围(如首屏 < 1s,静态资源 < 100ms)。
2) 收集信息:列出当前域名、原点服务器(IP/机房位于台湾或海外)、已有CDN(若有)、HTTPS证书类型、主要静态资源路径(/static,/assets)和动态接口路径(/api)。
1) 选机房:优先选择台北(TPE)机房或台中近海节点;若无法选机房,选择附近平面延迟低的香港/台北PoP。
2) DNS:使用GeoDNS或Anycast DNS(如Cloudflare, NS1),将台湾IP段解析到台湾PoP或指定CDN地域。设置低TTL(300s)进行初期调整,稳定后改为600-3600s。
1) 静态域名分离:建立静态子域 static.example.com,CNAME指向CDN提供的域名,避免Cookie传递。
2) SSL:使用CDN托管证书或上传自签证书并启用TLS 1.3、HTTP/2(或HTTP/3)。
1) 在原点 Nginx 配置静态文件:location /static/ { expires 30d; add_header Cache-Control "public, max-age=2592000, immutable"; gzip_static on; }。
2) 设置资源版本化:使用文件名指纹(app.v1.2.3.js)或query string策略(推荐文件名指纹),避免复杂的缓存失效。
1) 制定规则:静态资源(.js,.css,.jpg,.svg)设长TTL(30d),图片可长期缓存;API接口设短TTL或不缓存。
2) 缓存键:关闭或标准化Query String(按需保留必要参数),确保 Cookie 排除静态域名,避免将 Set-Cookie 回源带入缓存键。
1) Varnish 基本VCL示例:在vcl_recv中根据Cookie与URL判定是否缓存;在vcl_backend_response中设置beresp.ttl = 10s~60s缓存短暂动态页面。
2) 缓存分层:启用 origin shield(CDN功能)以减少回源频率,Varnish作为边缘缓存提高命中率。
1) 主动清理:使用CDN的API或控制面板进行路径或标签清除,如Cloudflare的purge_by_url或Fastly的surrogate-key。
2) 被动失效:采用版本化文件名,部署流程中自动替换静态资源URL,避免频繁Purge。
1) 测试节点连通性:使用mtr/traceroute从多个台湾节点(或使用线上测站)测延迟与丢包,选择最优CDN PoP。
2) Anycast与GeoIP结合:确保DNS解析能优先返回台湾近源IP,避免被全球Anycast误导到远端PoP。
1) 启用Brotli/Gzip:在CDN或原点启用Brotli优先,配置Nginx或CDN开启压缩并排除已压缩类型(.mp4,.zip)。
2) 图片现代格式:提供WebP/AVIF备份,使用CDN自动转码或在构建时生成。
1) 验证命中率:用curl检测响应头(curl -I https://static.example.com/app.js),查看CF-Cache-Status/ X-Cache等字段。
2) 使用RUM与合成监测:启用浏览器端性能监控(Lighthouse, NewRelic, Datadog),并在台湾各城市使用合成脚本定期检测。
1) 常用命令:dig +short example.com @1.1.1.1(查看解析);curl -I -H "Host: static.example.com" https://
2) 调试要点:若非命中,检查Cookie、Cache-Control、Set-Cookie,或CDN缓存键包含了无关header或Query。
1) 部署流程:CI/CD在发布时自动触发静态资源版本化并调用CDN的Purge API或更新surrogate-key。
2) 定期复盘:每月查看CDN命中率与回源流量,并根据台湾用户分布调整PoP优先级与DNS策略。
答:使用从台湾测站或VPN发起curl请求并查看响应头中的CDN标识(如CF-Cache-Status、X-Cache、Via、Server-Route等),同时比对traceroute的最后几跳是否落在台湾的IP段;也可在CDN控制台查看边缘请求统计并筛选台湾地区。
答:常见原因包括资源未指纹化、响应带Set-Cookie或Cache-Control:no-cache、CDN缓存键包含不必要的Query/Headers。解决:启用文件名版本化、在静态域名去除Cookie、在CDN上规范化Query String并设置合理的Cache-Control头。
答:使用CDN的origin shield或中间层缓存(如Varnish),在CDN上配置请求速率限制和排队;在原点设置短期缓存(如10s-60s)防止瞬时打满回源,同时在部署高峰前预热缓存(cache warm)并使用分批发布减少突发回源。