我在 Debian 中使用 Varnish 6.0 LTS
我从这里使用 magento2 vcl 6:
https://github.com/magento/magento2/blob/2.4-develop/app/code/Magento/PageCache/etc/varnish6.vcl
当我发出带有标签模式的 curl 请求时,我希望得到的响应是:
“发现并清除了 X 个对象命中”
vcl 的部分在这里:
if (req.http.X-Magento-Tags-Pattern) {
ban("obj.http.X-Magento-Tags ~ " + req.http.X-Magento-Tags-Pattern);
}
if (req.http.X-Pool) {
ban("obj.http.X-Pool ~ " + req.http.X-Pool);
}
#Here i would like to return the Ban Purged Hits counter
return (synth(200, "You have Purged X items"));
答案1
vmod_xkey
我建议你使用vmod_xkey
。这是一个开源 Varnish 模块,可执行基于标签的失效。你可以从下载源代码https://github.com/varnish/varnish-modules。
但是,您必须从源代码编译该模块。
成功安装 VMOD 后,您可以在此处找到 API:https://github.com/varnish/varnish-modules/blob/master/src/vmod_xkey.vcc。
不过有一些限制:目前您使用X-Magento-Tags
关键字标记响应。这将不得不改为xkey
关键字。希望您可以在 Magento 中进行此更改。
完成此操作后,您可以调用set req.http.n-gone = xkey.purge(req.http.X-Magento-Tags-Pattern);
。req.http.n-gone
标题包含已清除项目的数量。
vmod_ykey
如果vmod_xkey
限制太多,您也可以使用vmod_ykey
,这是 Varnish Enterprise 的替代方案。它提供了更大的灵活性。
看https://docs.varnish-software.com/varnish-cache-plus/vmods/ykey/用于文档。
正如文档中提到的,您可以按如下方式标记内容:
sub vcl_backend_response {
ykey.add_header(beresp.http.X-Magento-Tags);
ykey.add_header(beresp.http.X-Pool);
}
可以通过 进行无效化set req.http.n-gone = ykey.purge_header(req.http.X-Magento-Tags-Pattern);
。
免责声明: 清漆企业是商业软件,需要许可证。但是,您可以使用官方机器映像在云端。这允许您按现收现付的方式支付许可证费用。开发者版本收费较低的 AWS 图像。