我有一个缓慢的网络应用程序,我在它前面放置了 Varnish。所有页面都是静态的(它们不会因不同的用户而变化),但它们需要每 5 分钟更新一次,以便包含最近的数据。
我有一个简单的脚本 ( wget --mirror),它每 15 分钟抓取一次整个网站。每次爬行大约需要 5 分钟。爬网的目的是更新 Varnish 缓存中的每个页面,这样用户就不必等待页面生成(因为所有页面都是最近生成的,这要归功于蜘蛛)。
时间线如下所示:
0:00:00 到 0:05:00 之间的请求可能会访问尚未更新的页面,并且将被迫等待几秒钟以等待响应。这是不能接受的。
我想做的是,也许使用一些 VCL 魔法,总是将来自蜘蛛的请求转发到后端,但仍将响应存储在缓存中。这样,用户将永远不必等待页面生成,因为没有 5 分钟的时间窗口,其中部分缓存是空的(可能除了在服务器启动时)。
我怎样才能做到这一点?
Sha*_*den 10
req.hash_always_miss 应该做的伎俩。
不要在蜘蛛运行开始时进行完全缓存刷新。相反,只需将蜘蛛设置为工作 - 在您的 中vcl_recv,将蜘蛛的请求设置为始终错过缓存查找;他们将从后端获取一个新副本。
acl spider {
"127.0.0.1";
/* or whereever the spider comes from */
}
sub vcl_recv {
if (client.ip ~ spider) {
set req.hash_always_miss = true;
}
/* ... and continue as normal with the rest of the config */
}
Run Code Online (Sandbox Code Playgroud)
在这种情况发生时,直到新的响应在缓存中,客户端将继续无缝地为它们提供旧缓存(只要它仍在其 TTL 内)。
| 归档时间: |
|
| 查看次数: |
2546 次 |
| 最近记录: |