2012-06-20 62 views
11

我想使用HTTP清除我的清漆的元素。這個http調用是從varnish後面的後端服務器觸發的,所以後端服務器除了HTTP外沒有其他訪問。使用HTTP和REGEX的清漆清除

我已經實現與根據ACL以下清除規則,爲

curl -X PURGE http://www.example.com/image/123/photo-100-150.jpg 

做工精細,但我希望能夠使用正則表達式

curl -X PURGE http://www.example.com/image/123/*.jpg 

這樣,我通過HTTP清除的URL想要在新圖片上傳後清除此圖片的所有縮放版本。有沒有辦法?

回答

9

試試這個:

如果清漆3.0及以上。

vcl_recv { 
    if (req.request == "PURGE") { 
      if (!client.ip ~purge){ 
        error 405 "Not allowed"; 
      } 
    ban("req.http.host == " +req.http.host+" && req.url ~ "+req.url); 
    error 200 "Ban added"; 

    } 
0

當然有。

在VCL中,您想使用禁用方法 - 記錄在「man vcl」中。它會針對傳入的請求創建過濾器。如果你打算以每秒超過2次的速度使用它,我建議你谷歌「禁止友好」,並相應地重寫表達式。

未經測試的代碼:

sub vcl_recv { 
     if (req.method == "PURGERE" and client.ip ~ admin_network) { 
      ban("req.http.host == " + req.http.host + " && req.url == " + req.url); 
     } 
0
acl purge { 
"127.0.0.1"; 
} 

sub vcl_recv { 
    if (req.request == "PURGE") { 
     if (!client.ip ~ purge) { 
      error 405 "IP:" + client.ip + " Not allowed."; 
     } 
     ban("req.http.host == " + req.http.host + " && req.url ~ " + req.url); 
     error 200 "host:" + req.http.host + " url:" + req.url + " Ban added"; 
    } 
} 
4

首先定義誰可以使用該清洗白名單,然後在您的VCL添加淨化器節。

acl purge { 
"127.0.0.1"; 
"10.22.0.0"/16; 
} 


sub vcl_recv { 


if (req.http.X-Purge-Regex) { 
     if (!client.ip ~ purge) { 
      error 405 "Varnish says nope, not allowed."; 
     } 
     ban_url(req.http.X-Purge-Regex); 
     error 200 "The URL has been Banned."; 
} 

光油將使用標頭X-Purge-Regex的值來創建一個禁令。

,那麼你可以禁止這樣的事情:

curl -v -X PURGE -H 'X-Purge-Regex: ^/assets/*.css' varnishserver:6081 

curl -v -X PURGE -H 'X-Purge-Regex: ^/images/*' varnishserver:6081 

varnishserver是您的清漆服務器的地址。

+0

這裏有什麼幫助嗎? :) http://stackoverflow.com/questions/35632607/is-the-http-verb-purge-idempotent –