在我的应用程序堆栈中,我正在使用CouchDB(在这种情况下,所有的意图和目的都是一个简单的REST服务器),我想把Varnish放在它的前面以减轻读取负载。
我知道每当我的应用程序通过POST或者PUT更新一个文档时,旧文档都是失效的,但是由于CouchDB输出的头文件,Varnish并没有意识到这一点,所以继续为以后的GET请求提供旧版本。
基本上来说,当POST或PUT方法发送到同一个URL时,我希望能够在给定的REST URL处purge文档。
我可以configuration清漆来达到这个目的吗?
我可以让我的应用程序在每次POST或PUT后发送一个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); } }