2

用 Cloudflare 缓存本站的订阅文件

 7 months ago
source link: https://cyrusyip.org/zh-cn/post/2022/11/22/cache-rss-with-cloudflare/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

用 Cloudflare 缓存本站的订阅文件

2022-11-22 约 985 字 预计阅读 2 分钟

本站目前使用 Vercel 部署。最近看了下 Vercel 的使用量,10 月份中文订阅文件(/zh-cn/index.xml)用了 17 GB 流量(平均每日 561 MB),占据了大部分流量,消耗流量第二多的文件只占 79 MB。本站 10 月就 959 次访问,没想到有那么多人订阅。Vercel 免费账户每月 100 GB 流量,真担心有一天流量超标了。

本站的订阅文件包含所有文章全文,大小是 1 MB。减少文章或者文章内容改为摘要都可以减少文件大小。只要流量不超标,我还是希望文件保持完整,给读者选择看网页或者使用 RSS 阅读器的自由。

之前听闻 Cloudflare 提供免费无限流量的 CDN 服务,那让本站使用 Cloudflare 提供的 CDN 不就能减少 Vercel 的流量吗?Vercel 官方就有相关教程:How do I use a Cloudflare domain with Vercel? – Vercel Docs。使用 CDN 之后 Vercel 流量并没有明显变化。11 月 10 号使用 Cache Rules 缓存中文和英文订阅文件,之后中文订阅文件流量降低到 100 MB 左右,效果挺好。11 月 14 日将缓存时间(Edge TTL)改为 2 小时,之后中文订阅文件流量从 55 MB 逐步变成 2.2 MB,效果极佳。11 月 22 日晚上 10 点 55 分 Cloudflare 后台显示 24 小时内缓存了 97.81% 流量。

2 小时的缓存时间虽然很省流量,但是可能导致发新文章后过 2 小时订阅文件才更新。11 月 22 日晚上 11 点 07 分我把缓存时间改为了保持原样(Respect origin),接下来三天订阅文件的流量都低于 6 MB。

以下是缓存规则的设置方法(你也可以按照自己需求来,不用和我一样):

  1. 点击域名 -> Caching -> Cache Rules
  2. 点击 Create cache rule
  3. Rule name 填写规则名称
  4. 点击 Edit expression 并填入 (http.request.uri.path eq "/zh-cn/index.xml") or (http.request.uri.path eq "/en/index.xml")
  5. 上一步对应的手动操作:
    1. Field 选择 URI Path
    2. Operator 选择 equals
    3. Value 填 /zh-cn/index.xml
    4. Field 选择 URI Path
    5. Operator 选择 equals
    6. Value 填 /en/index.xml
  6. Cache status 选择 Eligible for cache
  7. Edge TTL 表示多久缓存一次文件,可以不设置。如果要设置就点 Add -> Override origin,选择一个合适的时间。
  8. 点击最后的 Deploy

设置完后可以用 curl --head 检查文件缓存状态(cf-cache-status),状态含义请参看:Default Cache Behavior · Cloudflare Cache docs

❯ curl --head https://cyrusyip.org/zh-cn/index.xml | grep cf-cache-status
cf-cache-status: REVALIDATED

折腾完之后我又在想:要是订阅文件以外的路径也很多流量怎么办(焦虑发作……)?我还是发现了一劳永逸的方法:改用无限流量的 Cloudflare Pages。Cloudflare Pages 没有超越 Vercel,两者的免费帐号各有优缺点。

Vercel Cloudflare Pages
使用量 6000 分钟 500 次
流量 100 GB 无限
配置文件 支持 不支持

Cloudflare Pages 除了流量无限,其他都比 Vercel 差。CDN 套壳算是集两家所长,但是 Vercel 文档并不推荐这样做,参看:Can I use a proxy on top of my Vercel Deployment? – Vercel Docs。目前就这样吧,慢慢观察这个方案有没有问题。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK