当我们从不同的内容源构建网页时,可能需要从外部服务器获取一些图像(例如,当合并 RSS 源时),这些服务器可能不如我们自己的数据中心那么快或连接良好。我希望有一种方法可以将文件分别复制到我们网站上运行的服务器地址中,以减轻外部服务器的负载,并尽可能更改文件名以隐藏图像是动态生成的这一事实。
例如打开以下网址
http://domain.de/content/query?file=foo/nr_1.gif
变成这样:
mydomain.net/static/domain.de/query_3fresource_3dfoo_2fnr_5f1.gif
这应该尊重 etags、if-modified-since 更改过期标头,以使文件静态且可缓存,无论原始服务器说什么。
我想我可以使用 varnish 和另一个 Web 服务器来构建类似的东西,但也许已经有可用的解决方案了。
这可能是 CDN 的一部分,但我预计不需要真正的 CDN,因为我们没有很多来自其他国家的访问者
答案1
我会强烈建议使用 varnish 或 squid 之类的代理,而不是自己下载文件并保存,这样代理就会处理所有的缓存过期和其他娱乐活动,让缓存变得非常有趣。
如果您尝试缓存动态生成的内容,且请求标头中没有适当的到期信息,则您要么需要让生成这些页面的任何人包含适当的标头(基于组成页面的数据的变化率),要么如果这确实不可能,则覆盖 Varnish VCL 文件中的到期时间。
通过将所有内容检索到文件中,然后在本地提供这些内容来进行“缓存”,意味着你可能会请求一大堆实际上永远不会提供给用户的内容(这意味着原始服务器上的负载——网络流量、CPU、磁盘等——可能更高比现在更糟糕),你最终还是要重新实现缓存代理的大部分功能(过期、存储管理等)。这不值得。目前还没有类似的东西(至少我所知道的),因为任何聪明到可以做出这种不完全是垃圾的东西的人都足够聪明,能够意识到这是一个多么糟糕的主意啊,以及他们如何重新实现 Squid 的硬半部分。