当从不同的内容源构建我们的网页时,可能需要从外部服务器获取一些图像(例如,当合并 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 change expires headers 以使文件静态和可缓存,无论原始服务器说什么。
我想我可以使用 varnish 和另一个 Web 服务器构建类似的东西,但也许已经有一个可用的解决方案。
这可能是 CDN 的一部分,但我不认为真正的 CDN 有必要,因为我们没有很多来自其他国家的访问者
我强烈建议使用 varnish 或 squid 之类的代理,而不是自己下载文件并保存它们,这样代理就可以处理所有缓存到期和其他使缓存变得如此有趣的娱乐活动。
如果您尝试缓存动态生成的内容并且在请求标头中没有正确的到期信息,您要么需要让生成这些页面的人包含适当的标头(基于数据的变化率在页面上),或者如果这确实不可能,则覆盖您的 Varnish VCL 文件中的到期时间。
通过将所有内容检索到文件然后在本地提供它们来“缓存”,这意味着您可能会请求一整堆实际上永远不会提供给用户的内容(这意味着负载——网络流量、CPU、磁盘,无论如何 - 在原始服务器上可能比现在更高)并且您最终将重新实现使缓存代理有用的大部分内容(到期,存储管理等)。这不值得。那里没有这样的东西(无论如何我都知道),因为任何足够聪明的人都能做出这样的不完整的东西,足够聪明地意识到这是一个多么糟糕的主意,以及他们是如何做到的无论如何都要重新实现 Squid 的硬半部分。