用Varnish + Regex替换页面内容

5
如果我想让我的Varnish缓存服务器在提供或存储页面之前从后端替换页面内的内容(例如:更改div的类),应该如何操作(vcl_fetch?)?
我想使用简单的正则表达式执行替换,因为我认为这在Varnish中是原生支持的。
1个回答

6

Varnish不支持原生修改响应正文。您需要一个Varnish模块(vmod)来实现此功能。

Aivars Kalvans有一个名为libvmod-rewrite的模块,可以完全满足您的需求。然而,根据Aivars的说法,该vmod仅用于概念验证,尚未准备好用于生产环境。无论如何,您都可以将其用作起点。

如果您使用Apache,则可以使用mod_ext_filter来修改响应正文。以下是mod_ext_filters文档中的示例。由于您可以将响应正文传递给任何外部命令,因此非常容易对内容进行必要的修改。

# mod_ext_filter directive to define a filter which
# replaces text in the response
#
ExtFilterDefine fixtext mode=output intype=text/html cmd="/bin/sed s/verdana/arial/g"

<Location />
# core directive to cause the fixtext filter to
# be run on output
SetOutputFilter fixtext
</Location> 

最终我决定在请求到达Varnish之前编写自己的透传程序。不过我会看一下libvmod-rewrite。谢谢。 - tweak2
关于 mod_ext_filters,如果 Apache 是一个选项的话,我认为也许 mod_substitute 更适合这种用例。 - George

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接