静态资源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_client 和 RefreshCdnUrl / 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的海外节点缓存清理任务。

分享到:
上一篇
日志自动清理定时脚本避免磁盘爆满宕机
下一篇
容器资源配额限制防止进程耗尽内存CPU:容器资源配额限制
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意