Eu meio que encontrei uma maneira de fazer isso.
Dependendo do valor do cabeçalho da solicitação de HTTP, execute um script de lua para excluir o arquivo de cache (hash da chave e seus últimos caracteres x + y, se x: y nível do cache) no proxy_cache do Nginx.
Usando 'access_by_lua' em vez de 'content_by_lua', a fase do manipulador de conteúdo sempre sairá e retornará, mesmo que eu não escreva 'ngx.exit' ou 'ngx.OK'.
Eu tenho que executar o script lua no NGX_HTTP_ACCESS_PHASE e não no NGX_HTTP_CONTENT_PHASE , pois não estou gerando conteúdo ou resposta que deve vir do backend no meu cenário.
por exemplo, Nginx.conf
proxy_cache_bypass $http_x_delete_key;
proxy_no_cache $http_x_delete_key;
if ( $http_x_delete_key ){
...
access_by_lua_file ./purge_key.lua;
}
Quando a solicitação da chave de exclusão é exibida, o Nginx vai
1. Execute o script lua para excluir o arquivo de cache, mas não retornar imediatamente, pois ele está na fase de acesso.
2. Pedido irá ignorar a cache
3. Ao receber a solicitação, o aplicativo excluirá a chave no DB.
4. A resposta não será armazenada em cache no Nginx proxy_cache