针对国内配置 CDN 加速 Cloudflare Pages 访问

文章目录

前言

由于博客全栈部署在 Cloudflare 上,国内访问(特别是首次访问)会很慢,平均从访问到显示内容大约需要 4s 多,因此考虑为前端即 Cloudflare Pages 套一层国内的 CDN 来加速前端页面资源的分发,对于后端(Cloudflare Workers)由于是动态内容单独套 CDN 加速效果可能并不明显,可能需要上全站加速才能有效果,同时在测试中发现仅加速前端页面已经基本能够提供较为良好的用户体验了,于是不做处理

整体思路

加速 Cloudflare Pages 本身十分简单,只需要在国内任意一家厂商配置一个 CDN,回源地址填写 Cloudflare Pages 的地址就可以了,这里就不再详细介绍其配置过程

那么如何根据访问者 IP 将流量引导至国内的加速域名呢?这里使用 Cloudflare 的 规则 > 重定向规则 来实现,即判断访问者国家地区是否中国大陆,同时判断访问的主机名是自己要加速的域名的话就将其重定向至国内的加速域名,重定向目标规则设置为动态:

text
concat("https://<你的国内加速域名>", http.request.uri.path)

参考配置: 图片.png

这里重定向目标地址使用动态来确保重定向跳转到国内加速域名后仍然访问的是指定路径,而不是出现访问 https://xeu.life/about 却跳转到 https://cn.xeu.life 的情况

但是!但是! 到这里还没有结束,如果你国内 CDN 回源地址与重定向规则中判定的域名相同的话,那么不幸的是你的 CDN 回源时也会受到此规则影响形成无限重定向导致无法访问

解决方法也比较简单,为 Cloudflare Pages 再随便绑定一个专门用来回源的域名,或者直接使用分配的默认 Pages 地址回源,我这里绑定了 direct.xeu.life 作为回源地址,这样 CDN 回源时就不会触发以上规则导致回源失败了

后序

相信经常被 DDOS 的小伙伴都知道,一旦用上了 CDN,就等于将自己的钱包放在所有人都能拿到的地方,哪天有人不高兴了打打你的 CDN 玩,那么受罪的只有钱包,于是用 CDN 一定要做好防护措施,哪怕他可能并没有那么有用。针对 IP 的限流,预警,短时间内流量超过阈值直接关闭 CDN 等等一系列措施都可以让你的钱包不那么容易被掏空。当然,我觉得最能够隔绝大部分攻击的方法还是屏蔽国外 IP 的访问(大部分攻击其实都是来自国外,国内相对很少),屏蔽方法根据不同厂商有所不同,腾讯云可以直接通过插件配置可访问地区的黑白名单,阿里云没有直接的配置,但是可以使用他们的 EdgeScripts 来实现相同的功能,这里仅提供思路,不再做过多介绍(其实是懒)

评论

19 条留言
  1. 北岸貌似挺麻烦的

    1. 回复 sundys

      @sundys 相较于前几年现在备案流程已经大大简化了,之前还需要到指定的地方拍使用核验照

    2. 回复 sundys

      湖南备案只要打电话就行 哈哈哈

  2. 我用CF默认的域名搭建了这个项目,但是文章在国内网络环境中看不到,而您的网站可以看到,请问是如何做到的?

    1. 回复 nimrod1990

      @nimrod1990 CF默认的域名应该是半墙状态的,绑定一个自己的域名能缓解这个情况

  3. 你好,我部署了这个rin项目,这个about页面在哪里可以设置哈?

    1. 回复 Jackchen0514

      @Jackchen0514 写一篇文章,设置它的别名为 `about` 就可以了

      1. 回复 Xeu

        成功了,谢谢哈,想问下这个朋友们在哪里设置呢?

        1. 回复 Jackchen0514

          @Jackchen0514 直接切换到朋友们的页面,管理员是会有创建友链的卡片的

          1. 回复 Xeu

            我的friends页面一直在缓冲,但是我看friends的接口调用200成功返回

            1. 回复 Jackchen0514

              @Jackchen0514 想起来了,这个是bug没有修😨现在马上去修

              1. 回复 Xeu

                好的,谢谢哈

  4. 上传图片的时候,我看调用了 API_URL 如 https://rin-server.xxxxx.workers.dev/storage 这个接口, 报400错误,然后又调用一次,204 No Content

    1. 回复 Jackchen0514

      @Jackchen0514 欢迎到 GitHub 提 issue 哈,这里讨论比较麻烦

      1. 回复 Xeu

        好的

  5. S3_ENDPOINT 大佬,用minio存储,请问S3_ENDPOINT这个是怎么填写的

    1. 回复 onshine

      @onshine 没有使用过 minio,但是 minio 文档中应该会有说 S3 协议下 endpoint 怎么填

    2. 回复 onshine

      @onshine minio的endpoint就是api地址把

  6. 博主,请问你的文章中的设置字体大小、加粗,还要右边的目录部分是怎么设置的?最后那个设置里面导入WordPress导出的XML 文件这个有什么要求吗?