![在 POST 或 PUT 上清除 Varnish](https://linux22.com/image/587627/%E5%9C%A8%20POST%20%E6%88%96%20PUT%20%E4%B8%8A%E6%B8%85%E9%99%A4%20Varnish.png)
在我的应用程序堆栈中,我正在使用 CouchDB(在这种情况下,从各方面来看它都是一个简单的 REST 服务器),并且我想将 Varnish 放在它前面以减轻读取负载。
我知道每当我的应用程序更新文档POST
或PUT
旧文档时,旧文档就会失效,但是由于 CouchDB 发出的标头,Varnish 不会意识到这一点,因此会继续为后续GET
请求提供旧版本。
基本上,当或方法被发送到相同的 URL时,我希望能够purge
在给定的 REST URL 上获取文档。POST
PUT
我可以配置 Varnish 来实现这一点吗?
我可以让我的应用程序在每次之后发送一个PURGE
请求POST
,PUT
但我真的希望缓存对于应用程序来说是不可见的,因为对于较小的安装,它可能在没有 Varnish 的情况下运行。
基本上,vcl
我想这样做:
sub vcl_recv {
if ( req.request == "POST" || req.request == "PUT" ) {
purge;
return(pass);
}
}
但该purge;
方法不适用于vcl_recv
更新
ban
我似乎已经通过使用而不是实现了近似上述操作purge
- 紧接着触发的请求POST
和GET
进一步的GET
请求由缓存提供,所以看来我误解了语义。
我的子程序目前是:
sub vcl_recv {
if ( req.request == "POST" || req.request == "PUT" ) {
ban("req.url == " + req.url);
return(pass);
}
}
答案1
看到这个..
https://www.varnish-cache.org/docs/trunk/tutorial/purging.html
基本上,您正在查找要传递的内容,然后在命中/未命中中进行清除