Http

在 POST 或 PUT 上清除清漆

  • June 18, 2012

在我的應用程序堆棧中,我正在使用 CouchDB(在這種情況下,從所有意圖和目的來看,它都是一個簡單的 REST 伺服器),我想將 Varnish 放在它前面以減輕讀取負載。

我知道,每當我的應用程序通過更新文件POSTPUT舊文件失效時,由於 CouchDB 輸出的標頭,Varnish 沒有意識到這一點,因此繼續為後續GET請求提供舊版本。

基本上,當一個or方法被發送到同一個 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而不是實現了與上述相似的東西 - 對觸發器 apurge的立即後續請求以及從記憶體中提供的進一步請求,所以我似乎誤解了語義。POST``GET``GET

我的子程序目前是:

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

基本上,您正在查找要傳遞的內容..然後清除命中/未命中

引用自:https://serverfault.com/questions/399814