在 POST 或 PUT 上清除 Varnish

在 POST 或 PUT 上清除 Varnish

在我的应用程序堆栈中,我正在使用 CouchDB(在这种情况下,从各方面来看它都是一个简单的 REST 服务器),并且我想将 Varnish 放在它前面以减轻读取负载。

我知道每当我的应用程序更新文档POSTPUT旧文档时,旧文档就会失效,但是由于 CouchDB 发出的标头,Varnish 不会意识到这一点,因此会继续为后续GET请求提供旧版本。

基本上,当或方法被发送到相同的 URL时,我希望能够purge在给定的 REST URL 上获取文档。POSTPUT

我可以配置 Varnish 来实现这一点吗?

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

基本上,vcl我想这样做:

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

但该purge;方法不适用于vcl_recv

更新

ban我似乎已经通过使用而不是实现了近似上述操作purge- 紧接着触发的请求POSTGET进一步的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

基本上,您正在查找要传递的内容,然后在命中/未命中中进行清除

相关内容