2013-04-04 60 views
3

如果我希望我的清漆緩存服務器在提供或存儲頁面(vcl_fetch?)之前將頁面內的內容(即:更改div上的類)從後端替換,這可以做到嗎?用清漆+正則表達式替換頁面中的內容

我想使用簡單的正則表達式來執行替換,因爲我認爲它是在varnish中本地支持的。

回答

3

varnish本地支持修改響應主體。你需要一個清漆模塊(vmod)。

Aivars Kalvans有libvmod-rewrite,它完全符合您的要求。然而,vmod是一個概念證明,根據Aivars的說法,它尚未準備好用於生產。無論如何,您都可以將其作爲起點。

如果您使用的是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> 
+0

結束後,只有自己寫通道才能清漆。不過,我會看看libvmod-rewrite。謝謝。 – tweak2 2013-04-15 18:53:57

+0

關於'mod_ext_filters'我想可能[mod_substitute](http://httpd.apache.org/docs/2.4/mod/mod_substitute.html)可能更適合用例,如果apache是​​一個選項 – George 2017-02-08 19:53:43