2

我已经用我的 Apache Web 服务器安装了 Varnish 缓存并正确配置了它们。它工作正常,我现在可以通过 Varnish Cache 访问我的网页。

varnish 的默认行为是存储 Web 服务器提供的页面的副本。下次请求同一页面时,Varnish 将提供副本,而不是从 Apache 服务器请求该页面。

现在我的问题来了:是否可以在设置 Varnish 缓存后最初缓存我的整个网站,而无需访问页面然后将其存储在缓存中?这是因为,在设置清漆之后,缓存最初是空的,它需要访问一个页面才能在缓存上可用。这可以在不必手动访问每个页面的情况下完成吗?

4

2 回答 2

4

您正在寻找的是一种预热缓存的方法。您可以使用Web 爬虫,例如 Wget 或 HTTrack 来浏览您的站点varnishreplay。或者,如果您有页面的站点地图,您可以将其用作起点,并通过循环访问缓存并使用 curl 或 wget 在页面上发出请求来预热缓存。

使用 varnishreplay 需要您首先运行 varnishlog 并收集流量日志,然后才能稍后使用它来回放流量和预热缓存。

Wget、HTTrack 等可以指向您的主页,它们会爬过您的网站。但是,根据您网站的大小和性质,这可能并不实用(例如,如果您广泛使用 Ajax)。

除非您的页面需要很长时间才能从后端服务器(即 Apache)加载,否则我不会过多担心预热缓存。如果缓存内容的 TTL 足够高,大多数访问者无论如何都只会收到缓存内容。

于 2013-01-09T12:46:46.350 回答
1

有一种更好的方法可以做到这一点,它使用 req.hash_always_miss 并与 Varnish 3 和 4 一起使用(也使用站点地图)。它可以预热您的缓存并刷新旧页面,而无需清除缓存。此处概述了完整的图表、如何配置它的大纲和 3 个用于各种用例的脚本http://www.htpcguides.com/smart-warm-up-your-wordpress-varnish-cache-scripts/并且很容易适应非 WordPress 网站。

于 2015-08-17T15:24:12.943 回答