Могу ли я сделать недействительной произвольную запись в кэше с помощью 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";
}

Здесь вы можете найти больше примеров о запрете и чистке

Другие вопросы по тегам