Http
在 POST 或 PUT 上清除清漆
在我的應用程序堆棧中,我正在使用 CouchDB(在這種情況下,從所有意圖和目的來看,它都是一個簡單的 REST 伺服器),我想將 Varnish 放在它前面以減輕讀取負載。
我知道,每當我的應用程序通過更新文件
POST
或PUT
舊文件失效時,由於 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
基本上,您正在查找要傳遞的內容..然後清除命中/未命中