利用Cloudflare的API清除缓存图文教程

如何清除Cloudflare的在线缓存呢?很多小伙伴都是直接登陆Cloudflare面板后在后台点击清除缓存。但是还可以通过API进行缓存的清除操作的。这里搬主题就分享一下利用Cloudflare的API清除缓存图文教程。

利用Cloudflare的API清除缓存图文教程插图

因为免费版的Cloudflare只有三条缓存规则,对于一般网站来说勉强够用了,例如后台链接的缓存策略设置为绕过,某个时常更新的页面缓存策略设置为1个小时,其它不经常更新的页面缓存设置为半个月,本来我制作的网站也是按照这个策略正常运行的,直到发现最近很少收到国际友人的邮件,尤其是在上了CDN之后,一封都没有!抱着试试的心态自己在网站上填写了“联系我们”的表单,结果发现还真有问题,返回了403代码!

403是客户端有错误,导致禁止访问,当时就有种预感跟csrf_token有关,网站采用的是django框架,在配置文件中,存在一个CsrfViewMiddleware的中间件,为了防止跨站请求伪造,所以在以post请求提交form表单时,必须要验证随机数csrf_token,而由于缓存的存在,这个随机数无法通过后端的验证,所以一直返回403(但是在清除缓存之后,还是可以暂时正常提交表单,因为csrf验证通过)。

尝试按照django官网的教程,使用csrf_exempt装饰器标记视图,使其不受CSRF保护,官网对于csrf_protect的解释:

This decorator marks a view as being exempt from the protection ensured by the middleware.

复制

但是在我实际测试中,下面这种方法不可行

from django.views.decorators.csrf import csrf_exempt
class ContactUsView(View):
  ...
  @csrf_exempt
  def post(cls, request):
      ...

但也有可能是我的方法不对,因为django中装饰类,似乎和函数不同,需要装饰dispatch函数,这个后面再来测试吧。

from django.utils.decorators import method_decorator
from django.contrib.auth.decorators import login_required

@method_decorator(login_required, name='dispatch')
class ProtectedView(TemplateView):
    template_name = 'secret.html'

总之,就是因为这个原因导致联系我们的表单需要占据一个缓存“绕过”的策略,导致网站时常更新的那个页面策略随大流也缓存了半个月,这可真是太不友好了,现在就剩两种解决办法,一种很简单,花钱!升级下一个版本pro就会多达20个(这个数量不确定)缓存规则;或者辛苦点每隔2个小时清除一次该页面的缓存。

查阅CF的官方文档,确实提供了API方便用户清理缓存,主要有三种,分别是清除所有缓存文件“Purge All files”,单个缓存文件“Purge Files by URL”,还有第三种,根据域名、前缀、缓存标签来清除“Purge Files by Cache-Tags, Host or Prefix”。第一种,全站清缓存,没啥好写的,在CF控制台点一下就可以,没必要利用API;第三种方法只能用于企业版,由于价格原因我也不会去用它,没去了解;主要就是第二种清除单个url可以解决我的问题。

先来看下CF的官方文档,第一眼看的一脸懵逼,后来琢磨了下,算是搞清楚了,首先这个功能FREE版本是可用的,要求该账号有#cache_purge:edit权限,使用的方法是发送POST请求,然后需要一个Zone ID标识符(identifier)

利用Cloudflare的API清除缓存图文教程插图1

首先打开个人资料,选择API令牌中的Global API Key,这个钥匙的作用如下,其实就是在请求时放在头部的X-Auth-Key

The Global API Key is an all purpose token that 
can read and edit any data or settings 
that you can access inthe dashboard.
利用Cloudflare的API清除缓存图文教程插图2
利用Cloudflare的API清除缓存图文教程插图3

获知到这个X-Auth-Key之后,找个可以使用curl请求的命令行窗口,输入以下请求向CF请求你账号的权限有哪些

curl -X GET "https://api.cloudflare.com/client/v4/zones" \
  -H "X-Auth-Email: youraccount@gmail.com" \
  -H "X-Auth-Key: Global API Key" \
  -H "Content-Type: application/json"

可以看到我的账号permissions确实存在#cache_purge:edit权限,(当然,返回的json内容很多,可以将其格式化后自行了解) ‍

利用Cloudflare的API清除缓存图文教程插图4

那么接下来的操作就没有问题了,找到自己域名下面的Zone ID

利用Cloudflare的API清除缓存图文教程插图5

然后使用如下命令清除缓存链接,下面的data后面其实是一行,为了看的清除,我将其分了几行,将下方的zone_id、账号、全局钥匙、实际想清除缓存的链接填入进去,就可以正常使用了

curl -X POST "https://api.cloudflare.com/client/v4/zones/zone_id/purge_cache" \
     -H "X-Auth-Email: youraccount@gmail.com" \     
     -H "X-Auth-Key: Global API Key" \     
     -H "Content-Type: application/json" \     
     --data '{"files":
     ["https://will_purge_cache_page.com",
     {"url":"https://domain.com",
     "headers":{"Origin":"https://www.cloudflare.com","CF-IPCountry":"US","CF-Device-Type":"desktop"}
     }]}'

在这里得吐槽一下CF,首先清除缓存的是紧接着files后面列表的第一个链接will_purge_cache_page.com,无法在列表中增加多个链接,这就意味着如果想要清除多个链接,必须发送多次post请求;第二,这个url参数对应的键值对https://domain.com没搞清楚是什么作用,必须要是同一个域名下,但是实测中不会被清除缓存,而且必须存在,否则清除单个页面缓存会报错!

另外:

文档路径(https://developers.cloudflare.com/cache/how-to/purge-cache/)

关于开发者中心里面存在的清除缓存教程“Purge cache key resources”,要求的是zone_tag,并非Zone ID,所以这种方法是无法使用的。

利用Cloudflare的API清除缓存图文教程插图6

接下来的事情就简单了,在服务器上写一个shell脚本,然后写入到crontab文件中,定时运行即可自动清除指定的页面缓存了。

00 */2 * * * root /bin/bash /srv/purge_cache.sh > /srv/purge.log

参考:

# 跨站请求伪造
https://zhuanlan.zhihu.com/p/22521378
# django csrf
https://docs.djangoproject.com/en/4.0/ref/csrf/
# 基于类的装饰
https://docs.djangoproject.com/zh-hans/4.0/topics/class-based-views/intro/#id1
# CF help
https://api.cloudflare.com/#zone-purge-all-files
 收藏 (0) 更新不易,打赏吧

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

除特别注明外,本站所有文章均基于CC-BY-NC-SA 4.0原创,转载请注明出处。
文章名称:《利用Cloudflare的API清除缓存图文教程》
文章链接:https://www.banzhuti.com/cloudflare-api-purge-cache.html
分享到: 生成海报
版权免责声明

① 本站提供的资源(插件或主题)均为网上搜集,如有涉及或侵害到您的版权请立即通知我们。
② 本站所有下载文件,仅用作学习研究使用,请下载后24小时内删除,支持正版,勿用作商业用途。
③ 因代码可变性,不保证兼容所有浏览器、不保证兼容所有版本的WP、不保证兼容您安装的其他插件。
④ 本站保证所提供资源(插件或主题)的完整性,但不含授权许可、帮助文档、XML文件、PSD、后续升级等。
⑤ 由本站提供的资源对您的网站或计算机造成严重后果的本站概不负责。
⑥ 使用该资源(插件或主题)需要用户有一定代码基础知识!另本站提供汉化使用安装教程,仅供参考。
⑦ 有时可能会遇到部分字段无法汉化,同时请保留作者汉化宣传信息,谢谢!
⑧ 本站资源售价只是赞助和汉化辛苦费,收取费用仅维持本站的日常运营所需。
⑨ 如果喜欢本站资源,欢迎捐助本站开通会员享受优惠折扣,谢谢支持!
⑩ 如果网盘地址失效,请在相应资源页面下留言,我们会尽快修复下载地址。

热门文章

评论 抢沙发

评论前必须登录!

立即登录   注册

WordPress主题 插件 建站 汉化

定制服务联系我们
切换注册

登录

点击按钮进行验证

忘记密码 ?

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活

点击按钮进行验证