Могу ли я сделать недействительной произвольную запись в кэше с помощью Varnish?
Я исследую, могу ли я использовать Varnish для ускорения REST API.
В основном я хочу кешировать 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?
1 ответ
Я предлагаю этот учебник, где объясняются чистка и бан.
Вы должны быть осторожны при очистке, так как вы не должны позволять всем очищать URL.
Для этого вы должны сделать что-то вроде:
# 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";
}
Здесь вы можете найти больше примеров о запрете и чистке