2012-06-20 13 views
11

का उपयोग करके वार्निश पुर्ज मैं HTTP का उपयोग करके अपने वार्निश के तत्वों को शुद्ध करना चाहता हूं। यह http कॉल वार्निश के पीछे बैकएंड सर्वर से ट्रिगर किया गया है, इसलिए बैकएंड सर्वर में अन्य एक्सेस नहीं है लेकिन HTTP है।HTTP और REGEX

मैं अनुसार एसीएल के साथ निम्न शुद्धिकरण नियमों जो

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

के लिए अच्छा काम को लागू किया है, लेकिन मैं Regex

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

इस तरह मैं का उपयोग कर HTTP के माध्यम से एक यूआरएल शुद्ध करने के लिए सक्षम होना चाहते हैं एक बार नया अपलोड होने के बाद इस छवि के सभी स्केल किए गए संस्करण को साफ़ करना चाहते हैं। क्या उधर रास्ता है?

उत्तर

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" में प्रलेखित प्रतिबंध विधि का उपयोग करना चाहते हैं। यह आने वाले अनुरोधों पर एक फ़िल्टर बनाता है। यदि आप इसे प्रति सेकंड 2 गुना से अधिक की दर से उपयोग करने जा रहे हैं, तो मैं आपको Google "प्रतिबंध लूकर अनुकूल" की सलाह देता हूं और तदनुसार अभिव्यक्तियों को फिर से लिखता हूं।

Untested कोड:

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 में purger छंद जोड़ें।

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 –