海外CDN节点定时清理静态资源缓存全流程

海外CDN节点缓存静态资源可以加速全球访问,但更新资源后缓存未失效就会导致用户看到旧内容。
定时清理缓存能自动让新版本覆盖旧文件。
本文以主流CDN服务商为例(如Cloudflare、AWS CloudFront等),手把手教你在服务器上设置定时清理任务,全程使用API + crontab,无需额外付费工具。

为什么需要定时清理静态资源缓存?

  • 资源更新后用户仍加载旧文件:比如网站修改了CSS/JS/图片,CDN节点缓存未过期,用户浏览器拿到旧内容。
  • 手动清理繁琐且容易遗漏:每次上线都去后台点清除太麻烦,且容易忘。
  • 自动化提升运维效率:设置定时任务后,每天凌晨或发版后自动清理,减少人工疏忽。
  • 部分CDN免费版不支持智能Purge:一些免费CDN只有全清功能,定时全清可接受。

准备条件

  1. 目标CDN的API密钥:Cloudflare用户请在控制台获取Global API Key或API Token(推荐Token,权限更细)。AWS CloudFront需创建IAM用户并授予CloudFront的Purge权限。
  2. 一台Linux服务器(或任何能跑cron的环境),用于执行定时任务。也可以用宝塔面板的计划任务代替。
  3. 知晓要清理的资源URL或目录前缀:例如 https://cdn.example.com/static/*,或者直接全站刷新。
  4. curl和jq工具(一般系统自带curl,jq用于解析JSON响应,可以运行 apt install jqyum install jq)。

操作步骤:以Cloudflare为例设置定时清理

1. 获取API Token并记录Zone ID

登录Cloudflare控制台,进入My Profile → API Tokens,点击Create Token,选择Edit zone DNS模板,权限选择Zone → Cache Purge → Edit,指定目标域名,生成Token。
记下Token字符串。

在域名仪表盘右侧找到Zone ID,复制备用。

2. 编写缓存清理脚本

在服务器上 /opt/scripts/ 目录创建 purge_cf_cache.sh

#!/bin/bash
# 清理Cloudflare所有缓存
ZONE_ID="你的ZoneID"
API_TOKEN="你的APIToken"
curl -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/purge_cache" \
     -H "Authorization: Bearer $API_TOKEN" \
     -H "Content-Type: application/json" \
     --data '{"purge_everything":true}'
如需只清理特定文件,将 purge_everything 改为 files,并传入文件URL数组。示例:'{"files":["https://cdn.example.com/style.css"]}'

赋予执行权限:chmod +x /opt/scripts/purge_cf_cache.sh

3. 设置定时任务

运行 crontab -e,添加以下行(每天凌晨4点清理):

0 4 * * * /bin/bash /opt/scripts/purge_cf_cache.sh >> /var/log/purge_cf_cache.log 2>&1

保存退出。
cron会自动执行。

4. 测试执行

手动跑一次脚本看是否成功:

/opt/scripts/purge_cf_cache.sh

如果返回包含 "success": true 的JSON则成功。

常见问题与避坑说明

  • API Token权限不足:脚本返回403错误,检查Token权限是否包含Cache Purge。
  • 清理频率太高被限流:Cloudflare API每分钟最多30次请求(不同套餐不同),建议每天清理1-2次足够。
  • crontab时间不对:注意服务器时区设置,使用 timedatectl 检查和调整为UTC或Asia/Shanghai。
  • AWS CloudFront需使用CreateInvalidation API:脚本写法和Cloudflare不同,但逻辑一致;注意IAM权限需 cloudfront:CreateInvalidation
  • 全站清理后CDN边缘节点重新回源:若源站性能不够,建议在低峰期清理(如凌晨),避免回源流量突增导致源站压力大。

效果验证方法

  1. 清理前访问一个静态资源,记录响应头中的 cf-cache-status (Cloudflare) 或 x-cache (CloudFront) 状态为 HIT
  2. 执行清理后再次访问同一资源,状态应变为 MISSEXPIRED,表示缓存已清除。
  3. 观察cron日志(/var/log/purge_cf_cache.log)无错误输出。
  4. 对于需要验证的零基础用户,也可以直接在浏览器打开开发者工具,查看网络请求的响应头信息。

如果您的CDN服务商(如泽御云提供的综合CDN方案)也提供了API接口,可将上述脚本中的API地址和Token替换为其控制台提供的密钥即可。
不同CDN的API格式略有差异,建议以官方文档为准。

常见问题FAQ

Q:定时清理缓存会不会影响网站访问?
A:不会影响访问,只是清理后首次请求会回源拉取最新版本,响应时间略长几毫秒,但之后又会被缓存。建议在低峰期进行。

Q:我没有Linux服务器,能用宝塔面板设置吗?
A:可以。在宝塔面板的计划任务中选择“Shell脚本”,填入上面的清理命令,设置执行周期即可。

Q:我只想清理某个目录下的文件,怎么做?
A:修改脚本中API请求的JSON,对于Cloudflare使用 "files":["https://cdn.example.com/static/*"](支持通配符),注意通配符仅清除匹配的URL。

Q:API Key泄漏了怎么办?
A:立即在CDN控制台撤销或重新生成Key,并检查日志中是否有异常调用。建议使用限制IP的API Token提高安全性。

分享到:
上一篇
定时清理容器日志避免磁盘爆满宕机
下一篇
宝塔一键修复SSL证书链缺失HTTPS报错
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意