veja isto ..
basicamente você está fazendo uma pesquisa sobre o que você quer passar ... depois para a eliminação no hit / miss
Na minha pilha de aplicativos, estou usando o CouchDB (neste cenário, para todos os efeitos, é um servidor REST simples) e quero colocar o Varnish na frente para aliviar a carga de leitura.
Eu sei que sempre que meu aplicativo atualiza um documento através de POST
ou PUT
que o documento antigo é invalidado mas, devido aos cabeçalhos que o CouchDB coloca, o Varnish não percebe isso e assim continua a servir o antigo versão para pedidos subsequentes de GET
.
Basicamente, gostaria de poder purge
o documento em um determinado URL REST quando um método POST
ou PUT
for enviado para o mesmo URL.
Posso configurar o Varnish para conseguir isso?
Eu poderia fazer com que meu aplicativo enviasse uma solicitação PURGE
após cada POST
ou PUT
, mas eu realmente preferiria que o cache ficasse invisível para o aplicativo, pois, para instalações menores, ele poderia ser executado sem verniz no lugar.
Basicamente, em vcl
, gostaria de fazer isso:
sub vcl_recv {
if ( req.request == "POST" || req.request == "PUT" ) {
purge;
return(pass);
}
}
Mas o método purge;
não está disponível em vcl_recv
Atualizar
Parece que consegui algo semelhante ao acima, usando ban
em vez de purge
- a solicitação imediatamente subsequente para as solicitações POST
aciona GET
e mais GET
é enviada do cache, portanto parece que eu entendi errado a semântica.
Minha sub-rotina está atualmente:
sub vcl_recv {
if ( req.request == "POST" || req.request == "PUT" ) {
ban("req.url == " + req.url);
return(pass);
}
}
veja isto ..
basicamente você está fazendo uma pesquisa sobre o que você quer passar ... depois para a eliminação no hit / miss