清除POST或PUT上的清漆

在我的应用程序堆栈中,我正在使用CouchDB(在这种情况下,所有的意图和目的都是一个简单的REST服务器),我想把Varnish放在它的前面以减轻读取负载。

我知道每当我的应用程序通过POST或者PUT更新一个文档时,旧文档都是失效的,但是由于CouchDB输出的头文件,Varnish并没有意识到这一点,所以继续为以后的GET请求提供旧版本。

基本上来说,当POSTPUT方法发送到同一个URL时,我希望能够在给定的REST URL处purge文档。

我可以configuration清漆来达到这个目的吗?

我可以让我的应用程序在每次POSTPUT后发送一个PURGE请求,但我真的宁愿caching对于应用程序是不可见的,因为对于较小的安装,它可能在没有Varnish的情况下运行。

基本上,在vcl我想这样做:

 sub vcl_recv { if ( req.request == "POST" || req.request == "PUT" ) { purge; return(pass); } } 

但是purge; 方法在vcl_recv不可用

更新

我似乎已经通过使用ban而不是purge取得了一些近似上面的东西 – 紧接着的POST请求触发一个GET ,进一步的GET请求从caching服务,所以看起来我误解了语义。

我的子程序目前是:

 sub vcl_recv { if ( req.request == "POST" || req.request == "PUT" ) { ban("req.url == " + req.url); return(pass); } } 

看到这个..

https://www.varnish-cache.org/docs/trunk/tutorial/purging.html

基本上,你正在做什么你想通过查找..然后清除命中/错过