使用带有 mod_rewrite 的 Cloudflare 等 CDN 来节省带宽

使用带有 mod_rewrite 的 Cloudflare 等 CDN 来节省带宽

我知道像 Cloudflare 这样的 CDN 通过将静态文件缓存为图像、JS 和 CSS 文件来节省带宽。

我有一个可以动态生成图像的脚本,它的位置如下所示:

http://domain.com/image.php?id=1

带有id图像 ID。由于动态 URL,Cloudflare 不会缓存这些图像。如果我添加 mod 重写规则来重写 URL,使其变成类似以下内容:

http://domain.com/images/1

或者

http://domain.com/images/1.jpg

在这种情况下,CloudFlare 会缓存图像吗?或者图像实际上必须是驻留在目录中的真实文件?

答案1

在 CloudFlare 中,将所有内容缓存在给定端点上的最简单方法是使用缓存所有内容页面规则,星号将匹配通配符结果。因此,在第一个示例中,我们可以执行以下操作:

CloudFlare 在端点上缓存所有内容

Cache Everything 只能使用 Page Rule 来启用,因此上述示例在绝大多数情况下都是最好的,但也可以在 CloudFlare 中设置有关如何处理查询字符串的一般规则。

您可以在 CloudFlare 仪表板的“缓存”选项卡中全局执行此操作,默认情况下,标准选项将根据查询字符串缓存不同的资源。

在 CloudFlare 中设置缓存级别

答案2

我将从问题的结尾开始,然后逐步深入。首先,代理(Cloudflare 就像一个代理)无法区分静态内容和动态生成的内容,响应几乎相同。唯一的区别可能是请求文件的扩展名和服务器发送的缓存规则。Cloudflare 默认仅缓存具有某些扩展

话虽如此,您的两个示例都将被 Cloudflare 缓存(除非Cache-Control 标头设置为“private”、“no-store”、“no-cache”或“max-age=0”,或者响应中存在 cookie)。

另一件事是,默认情况下,Cloudflare 甚至会缓存带有查询字符串。每次查询字符串更改时,它都会提供不同的资源。只要扩展名正确或页面规则明确指定它进行缓存,无论扩展名是什么,使用查询字符串都没有问题。

相关内容