Você está fazendo return(lookup)
explícito em sua primeira vcl_recv. Isso significa que o código no segundo bloco vcl_recv só será executado se a solicitação não atingir nenhuma das condições no primeiro bloco (isto é, se não for ^(((www\.|old\.)?domain1\.net)|((www\.)?domain(2\.net|3\.com|4\.org))$
) e todos os outras partes do segundo bloco vcl_recv if
são bem-sucedidas.
Fundamentalmente, você está substituindo a lógica integrada perfeitamente do Varnish aqui, que teria passado as solicitações para os usuários logados (isto é, aqueles com cookies) para o backend, enquanto servia o resto fora do cache, se acessível. Você pode obter o resultado que está procurando simplesmente removendo todos os return(lookup)
s. Mas se você insistir em fazer isso da maneira atual, basta adicionar:
sub vcl_hash {
if ( req.http.Cookie ) {
hash_data( req.http.Cookie );
}
}
A vantagem de ignorar a lógica do Varnish é que mesmo os cookies que não têm qualquer tipo de responsabilidade no processamento da solicitação pelo servidor, como os IDs do urchin do Google Analytics, farão com que todas as solicitações atinjam o back-end. Para evitar isso, inclua na lista de permissões os cookies com os quais o servidor se preocupa ou liste na lista negra os que não são; Várias técnicas para realizar isso estão disponíveis na Web e no link .
Editar: Expandindo um pouco, o que está acontecendo aqui é que você está dizendo ao Vernish que, se uma solicitação entrar, digamos, domain1, usar o backend do domain1 e tentar recuperar esse objeto do cache. Se não estiver presente no cache, ele irá buscá-lo no back-end e armazená-lo no cache. Contanto que não exista um cabeçalho Set-Cookie presente na resposta (que, no default.vcl, faz com que o objeto fique inatingível), da próxima vez que alguém solicitar a mesma página, ele será visto como o usuário (ou o que for "não-usuário", no caso de alguém que não está logado, viu o último, presumindo que o TTL não expirou. O que fazemos com o código vcl_hash
é dizer que o Varnish deve considerar objetos em cache diferentes com base no Cookie que foi entregue com a solicitação. Poderíamos melhorar isso facilmente - por exemplo, só poderíamos nos preocupar com o cookie para páginas que não terminam em \.(jpg|png|gif|AndSoForth)$
, mas o lugar certo para fazer isso é em vcl_recv
, onde devemos simplesmente remover o cabeçalho Cookie totalmente para tais pedidos.