静态资源CDN海外节点缓存清理定时任务配置详解

为什么要给海外节点配置缓存清理定时任务

如果你的网站使用CDN加速全球访问,静态资源(如图片、CSS、JS)会被缓存到海外节点。
当资源更新后,旧缓存会导致海外用户访问到过期内容。
手动一个个节点清理太麻烦,配置一个定时任务自动清理海外节点缓存才是省心方案。

准备工作:获取CDN API密钥

无论你用阿里云还是腾讯云,都需要创建API密钥用于调用清理接口。

阿里云CDN

  1. 登录阿里云控制台,鼠标悬停右上角头像,点击 AccessKey管理
  2. 创建 AccessKey ID 和 AccessKey Secret,保存到本地
  3. 在 CDN 控制台找到要清理的域名ID(也叫“加速域名”)。

腾讯云CDN

  1. 打开腾讯云控制台,进入 访问管理 > 访问密钥 > API密钥管理
  2. 新建密钥,获取 SecretId 和 SecretKey。
  3. 在 CDN 控制台找到对应的域名。
安全提示:密钥权限建议只授予CDN缓存清理的最小权限,不要使用主账号密钥。

编写自动清理脚本

以Linux环境为例,使用Python脚本调用CDN API。
下面给出阿里云的示例(腾讯云逻辑类似,仅API地址和参数不同)。

阿里云Python脚本

#!/usr/bin/env python3
import json
import urllib.request
import urllib.parse
import hmac
import hashlib
import base64
import time
import random
import string

# 配置信息
access_key_id = '你的AccessKeyId'
access_key_secret = '你的AccessKeySecret'
domain_name = '你的加速域名'  # 例如 static.example.com
region = 'cn-hangzhou'
object_path = '/'  # 要清理的路径,/ 表示全部

# 阿里云CDN清理缓存API参数
params = {
    'Action': 'RefreshObjectCaches',
    'ObjectPath': object_path,
    'ObjectType': 'File',
    'Format': 'JSON',
    'Version': '2018-05-10',
    'AccessKeyId': access_key_id,
    'Timestamp': time.strftime('%Y-%m-%dT%H:%M:%SZ', time.gmtime()),
    'SignatureMethod': 'HMAC-SHA1',
    'SignatureVersion': '1.0',
    'SignatureNonce': ''.join(random.choices(string.ascii_letters + string.digits, k=16))
}

# 计算签名
sorted_params = sorted(params.items(), key=lambda x: x[0])
canonicalized_query = '&'.join([f'{k}={urllib.parse.quote(str(v), safe="")}' for k, v in sorted_params])
string_to_sign = f'GET&%2F&{urllib.parse.quote(canonicalized_query, safe="")}'
signature = base64.b64encode(hmac.new((access_key_secret + '&').encode('utf-8'), string_to_sign.encode('utf-8'), hashlib.sha1).digest()).decode('utf-8')

# 完整URL
url = f'http://cdn.aliyuncs.com/?{canonicalized_query}&Signature={urllib.parse.quote(signature, safe="")}'

try:
    response = urllib.request.urlopen(url, timeout=10)
    result = json.loads(response.read().decode())
    print('清理成功,返回结果:', json.dumps(result, ensure_ascii=False))
except Exception as e:
    print('清理失败:', str(e))

将脚本保存为 cdn_clean.py,赋予执行权限:

chmod +x cdn_clean.py

腾讯云脚本简要说明

腾讯云使用 tecentcloud-sdk-python 调用,可参考以下思路:

  1. 安装 SDK:pip install tencentcloud-sdk-python
  2. 导入 cdn_clientRefreshCdnUrl / RefreshCdnDir 接口。
  3. 用 SecretId 和 SecretKey 初始化客户端,调用 RefreshCdnDir 清理目录。

设置Linux定时任务(cron)

利用系统cron实现每天凌晨自动清理(可自定义频率)。

  1. 编辑crontab:
crontab -e
  1. 添加一行(每天凌晨2点执行):
0 2 * * * /usr/bin/python3 /path/to/cdn_clean.py >> /var/log/cdn_clean.log 2>&1
  • 路径请替换为你的实际路径。
  • 日志文件确保有写权限。
  1. 保存退出,查看cron是否生效:
crontab -l
如果想每2小时清理一次:0 */2 * * *,根据需求调整。

避坑指南与高频问题

1. 权限不足

  • 错误:“Forbidden”或“Access Denied”。
  • 解决:检查API密钥是否绑定了CDN权限,或密钥已被禁用。

2. 清理频率太高被限流

  • 阿里云/腾讯云API都有QPS限制(通常20-50次/秒)。
  • 避免每分钟都跑,至少间隔30分钟。

3. 海外节点与国内节点申请不同API?

  • 大部分CDN厂商统一API,指定域名即可,无需区分节点区域。
  • 如果需要单独指定区域,查看API文档是否支持 Area 参数。

4. 脚本运行正常但缓存没更新?

  • 可能清理只针对文件路径,但实际缓存层有CDN边缘节点和内部节点,需等5-10分钟生效。
  • 或者检查是否开启了HTTPS,部分厂商要求用相同协议调用。

效果验证

  1. 查看脚本日志 cat /var/log/cdn_clean.log,确认返回状态码。
  2. 在CDN控制台的“刷新预热”历史中查看任务记录。
  3. 用在线工具(如 curl -I https://你的域名/静态文件)对比清理前后 X-Cache 头部,从 HIT 变为 MISS 说明生效。
  4. 清一下自己本地DNS缓存,再访问海外节点测试。

如果你用的是其他CDN厂商(如Cloudflare、AWS CloudFront),原理相同:获取API凭证 -> 调用刷新接口 -> 配置cron。
关键在于理清API调用的具体参数和签名方式

遇到问题先回看上面的避坑点,再检查脚本和定时任务是否正常启动。
掌握这套流程后,你可以轻松管理任意CDN的海外节点缓存清理任务。

分享到:
上一篇
日志自动清理定时脚本避免磁盘爆满宕机
1
系统公告

机房迁移升级通知

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