如果我想让我的Varnish缓存服务器在提供或存储页面之前从后端替换页面内的内容(例如:更改div的类),应该如何操作(vcl_fetch?)?
我想使用简单的正则表达式执行替换,因为我认为这在Varnish中是原生支持的。
我想使用简单的正则表达式执行替换,因为我认为这在Varnish中是原生支持的。
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>
mod_ext_filters
,如果 Apache 是一个选项的话,我认为也许 mod_substitute 更适合这种用例。 - George