Estou desenvolvendo um sistema de armazenamento em cache para uma plataforma de comércio eletrônico que usará um proxy reverso para armazenamento em cache. Planejo lidar com a invalidação usando cabeçalhos HTTP / 1.1 adequados. Ou seja, definirei um ETag na primeira geração do conteúdo e no cache que esse valor ETag no aplicativo. O cabeçalho de controle de cache especificará "deve-revalidar" para que o proxy defina o cabeçalho If-None-Match em solicitações subsequentes com o ETag. O aplicativo pesquisará o valor ETag em cache e, se corresponder, enviará uma resposta 304, caso contrário, gerará uma resposta completa de 200.
Eu esperava usar o nginx, mas não sei ao certo se ele suporta ETags (os documentos indicam que não, mas talvez estejam desatualizados?). O verniz é outra opção, mas também não sou positivo.
Quais servidores proxy reversos por aí têm suporte completo para ETags? Eu gostaria que ele armazenasse em cache várias versões para que eu possa fazer coisas como testes divididos sem precisar desativar o cache. Ou seja, o HTTP / 1.1 especifica que um cliente pode enviar If-None-Match com vários valores ETag e o servidor deve responder com qual ETag correspondeu (se houver). Se o proxy reverso mantivesse várias cópias, e não apenas o último valor visto, e deixasse o servidor especificar em cada solicitação qual usar, isso seria o ideal.
O nginx requer módulos de terceiros para oferecer suporte ao ETag. E há dois deles.
fonte
Corrija-me se estiver errado e sei que este é um post antigo - mas gostaria de comentar sobre novos transeuntes. Eu acredito que um cache de proxy reverso não ajuda tanto quanto você gostaria ao usar ETags.
Os mecanismos de armazenamento em cache de validação usam o servidor de origem para validar se a ETag (ou data da última modificação) na solicitação ainda é válida (corresponde ou não ao etag de recursos, dependendo do cabeçalho usado ou se foi / não foi modificado desde a data indicada no pedido).
Isso significa que um cache de proxy reverso, como o Varnish, ainda passará essa solicitação para o servidor de origem. Pode responder com a solicitação em vez de o servidor lidar com isso, mas você não salvou a viagem de ida e volta no servidor de origem.
Os navegadores podem armazenar em cache respostas e manipular uma resposta 304 em qualquer caso, portanto, o cache privado do usuário pode ser mais adequado para lidar com isso do que usar um proxy reverso (YMMV, especialmente em escala e dependendo do seu caso de uso, é claro. deseja fazer suposições sobre seus aplicativos).
A partir da especificação 13.3 :
e observe 13.3.4 :
Portanto, o Varnish pode retornar uma resposta para você, mas você ainda tem uma viagem de ida e volta ao servidor. Se você pode usar um cache de aplicativo como APC ou memcache, isso ainda pode valer a pena para você. O cache de validação geralmente é melhor para economia de largura de banda do que para economia de recursos do servidor.
É melhor deixar o cache de validação para o cliente (navegador ou código da API).
O uso do modelo Expiration para armazenamento em cache é onde um cache de proxy reverso realmente brilha. Isso permite que você pule completamente o servidor de origem. Usando
Expires
,Cache-Control
,Date
, etc, é a melhor (mais uma vez, IMO) mecanismo para um cache de proxy reverso como o cache pode retornar a resposta, assumindo a sua não obsoleto, sem nunca bater o servidor de origem.fonte
Você pode ver o Apache TrafficServer , que parece ter o que você precisa .
fonte
Até o momento, acredito que ainda não existem proxies compatíveis com essa especificação HTTP. Então, há cerca de um ano, decidi escrever meu próprio usando o Node.js e o MongoDb.
https://github.com/colinmollenhour/node-caching-proxy
fonte