我可以在 Varnish 中完成这个吗?
问题:我可以在 Varnish 中完成这个吗? 我有一个网站,它通过来自许多不同网站的 RSS 提要获取新闻文章。该脚本将这些文章添加到 mysql 数据库中。我在许多页面上向查看者显示每页 10 篇文章。 目前,每次更新脚本将新文章添加到数据库时,我都会缓存整个页面并清除缓存。它速度很快,但效率不高。缓存的页面只有几分钟的生命周期,尽管文章本身可以缓存更长的时间。 我可以使用 varnish 将
·
问题:我可以在 Varnish 中完成这个吗?
我有一个网站,它通过来自许多不同网站的 RSS 提要获取新闻文章。该脚本将这些文章添加到 mysql 数据库中。我在许多页面上向查看者显示每页 10 篇文章。
目前,每次更新脚本将新文章添加到数据库时,我都会缓存整个页面并清除缓存。它速度很快,但效率不高。缓存的页面只有几分钟的生命周期,尽管文章本身可以缓存更长的时间。
我可以使用 varnish 将单个文章存储在缓存中吗?因此,生成的每个页面都会有文章的链接/指针/引用,而不是文章本身。然后,我可以将这些页面缓存一小段时间,同时将文章缓存更长时间。
我将如何在 Varnish 或任何其他缓存机制上执行此操作?这会在缓存命中时执行更差/相同的全页缓存吗?
我在 Ubuntu 12.04 和 nginx 上。
谢谢!
解答
您想使用边缘边包括。基本上,您的页面使用这样的 ESI 链接:
<div class="articles">
<esi:include src="/path/to/article/1"/>
<esi:include src="/path/to/article/2"/>
<esi:include src="/path/to/article/3"/>
</div>
现在在 Varnish 中,有这个:
sub vcl_fetch {
set beresp.do_esi = true;
}
或在清漆 4 中:
sub vcl_backend_response {
set beresp.do_esi = true;
}
当上面的代码通过 Varnish 时,Varnish 会将每个esi:include
替换为 URL/path/to/article/1
的内容。您可以将页面本身缓存几分钟,并将每篇文章缓存几天。
更多推荐
已为社区贡献15557条内容
所有评论(0)