在我的应用程序堆栈中,我正在使用 CouchDB(在这种情况下,就所有意图和目的而言,它是一个简单的 REST 服务器)并且我想将 Varnish 放在它前面以减轻读取负载。
我知道每当我的应用程序通过更新文档POST
或PUT
旧文档无效时,但是由于 CouchDB 推出的标头,Varnish 没有意识到这一点,因此继续为后续GET
请求提供旧版本。
基本上,当将or方法发送到同一 URL时,我希望能够访问purge
给定 REST URL 上的文档。POST
PUT
我可以配置清漆来实现这一点吗?
我可以让我的应用程序在每个or之后发送一个PURGE
请求,但我真的希望缓存对应用程序不可见,因为对于较小的安装,它可能在没有 Varnish 的情况下运行。POST
PUT
基本上,vcl
我想这样做:
sub vcl_recv {
if ( req.request == "POST" || req.request == "PUT" ) {
purge;
return(pass);
}
}
但是该purge;
方法不可用vcl_recv
更新
我似乎已经通过使用ban
而不是实现了近似于上述的东西purge
- 对POST
触发器的立即后续请求 aGET
和进一步GET
的请求是从缓存中提供的,所以我似乎误解了语义。
我的子程序目前是:
sub vcl_recv {
if ( req.request == "POST" || req.request == "PUT" ) {
ban("req.url == " + req.url);
return(pass);
}
}