Como você armazena em cache páginas da web com um cabeçalho personalizado usando o proxy reverso de cache, como o Squid, o Varnish ou o Nginx?

2

Praticamente todas as páginas do meu site são geradas dinamicamente. No entanto, eles não mudam com tanta frequência (semelhante a uma página do fórum). Então, eu gostaria de armazená-los em cache usando um proxy reverso de cache, como o Squid, o verniz ou o Nginx.

O problema é que, para os usuários logados, cada um deles verá um cabeçalho personalizado dizendo "Bem-vindo John Doe. Logout" no canto superior direito da página (assim como o serverfault). Enquanto os usuários que não estiverem conectados, verão um cabeçalho que diz "Login".

Então, basicamente, embora todos os usuários vejam a mesma página em geral, todos eles têm versões ligeiramente diferentes devido ao cabeçalho personalizado.

Existe alguma maneira para que eu possa armazenar em cache a parte "principal" da página e servi-la no cache enquanto gero o cabeçalho personalizado dinamicamente para cada usuário?

Este deve ser um problema muito comum. Como isso é resolvido em geral?

    
por Continuation 08.04.2010 / 15:11

3 respostas

2

Com o Varnish, você pode usar o ESI, no entanto, as páginas processadas do ESI não podem ser compactadas sem alguma complexidade adicional. link

Eu não usei isso em produção, mas o Nginx também fornece a funcionalidade do ESI por meio de um plug-in, link

O Nginx fornece caching por meio do link e, com o outro plug-in, manipularia o armazenamento e o armazenamento em cache de fragmentos.

link explica o ESI.

Como alternativa, você pode fazer seu próprio cache de fragmento no lado do aplicativo.

    
por 08.04.2010 / 16:20
3

Uma coisa que você pode fazer (além do ESI, que não corrige problemas de largura de banda ou reduz o número de solicitações que você deve atender) é realmente dividir a página em várias entidades. Por exemplo, todas as coisas públicas estão em uma página armazenada em cache e, em seguida, os itens personalizados são enviados por meio de um AJAX / iFrame. É assim que funciona o iGoogle, exceto ao contrário ... no caso do iGoogle, a página de base é personalizada, mas os componentes de feed RSS escolhidos são públicos, podem ser armazenados em cache e trazidos para a página principal via AJAX.

    
por 12.04.2010 / 04:29
1

Sim, armazene em cache a página principal, mas os componentes individuais entram em chamadas AJAX e você precisa colocar o pipe em vcl_recv para esses URLs.

if (req.url ~ "/ some-ajax-call") {                         retorno (tubo);                 }

    
por 20.04.2010 / 17:34