2015-07-03 84 views
0

我在調查是否可以使用Varnish來加速REST API。我可以使用Varnish使任意緩存條目無效嗎?

基本上,我想緩存GET需要很長時間。但是,當接收到PUT/POST/DELETE請求時,我想分析該URL,並根據我找到的信息,我想清除緩存條目。

例如:

GET /documents/:docType // return document list for specified docType 
DELETE /document/:docType/:docId // delete a document 

GET /documents/A0 <-- cached 
GET /documents/A1 <-- cached 
DELETE /document/A0/333 <-- first entry is purged 

我可以與VCL實現這一目標?

回答

0

我建議這varnish tutorial entry其中清除和禁令的解釋。

清除時應該小心,因爲您不應該允許每個人清除網址。

爲了做到這一點,你應該這樣做:

# IPs allowed to purge 
acl purgeIps { 
    "localhost"; 
    "192.168.55.0"/24; 
} 

然後在你的vcl_recv,你必須決定何時清除/禁令:

if (req.request == "PUT" || 
    req.request == "POST" || 
    req.request == "DELETE"){ 
    if (!client.ip ~ purgeIps) { 
     error 405 "Not allowed."; 
    } 
    purge; #I'm not sure if purge can be done here, if it doesn't work you should use it in vcl_hit and vcl_miss 
    # Also, if purge does not work here you should change this line for return(lookup); 
    error 200 "Purged"; 
} 

Here你可以找到更多的例子禁止和清除

+0

啓用PURGE不會造成太大的傷害,因爲它清除了一個單一的對象,與確切的URL匹配,並且該URL不能包含通配符(如Varnish sto使用散列標識符而不是URL本身的res對象,所以模式是沒有意義的)。另一方面,BAN可能是危險的, – karatedog

+0

是的,這就是我的意思。儘管如此,深入思考它並不是100%肯定的,也許如果你允許清除一個沉重的靜態對象,你可以通過清除和重複加載來暴露DDoS攻擊。 – Redithion

+0

無論您使用哪種方法,如果在請求中啓用 - 說 - PUT方法,然後是新生成的響應,則您仍然易受DDoS攻擊,因爲此進程無法緩存。潛在的攻擊者只需要爲該PUT找到適當的URL。雖然不知道應用程序的內部結構,但知道這些重物是什麼並不是微不足道的。 – karatedog

相關問題