Recurso do NGINX Plus: armazenamento em cache

Um dos casos de uso mais populares do NGINX Plus é como um cache de conteúdo, tanto para acelerar servidores de origem local quanto para criar servidores de borda para redes de entrega de conteúdo (CDNs). O armazenamento em cache pode reduzir significativamente a carga em seus servidores de origem, dependendo da capacidade de cache do seu conteúdo e do perfil do tráfego do usuário.

O NGINX Plus pode armazenar em cache o conteúdo recuperado de servidores HTTP upstream e as respostas retornadas pelos serviços FastCGI, SCGI e uwsgi.

O NGINX Plus amplia os recursos de armazenamento em cache de conteúdo do NGINX Open Source adicionando suporte para limpeza de cache e visualização mais rica do status do cache no painel de monitoramento de atividades ao vivo:

estado-do-cache-R7

Por que usar armazenamento em cache de conteúdo?

O cache de conteúdo melhora os tempos de carregamento de páginas da Web, reduz a carga em seus servidores upstream e melhora a disponibilidade usando conteúdo em cache como backup se seus servidores de origem falharem:

  • Melhor desempenho do site — O NGINX Plus fornece conteúdo em cache de todos os tipos na mesma velocidade que o conteúdo estático, o que significa latência reduzida e um site mais responsivo.
  • Capacidade aumentada — O NGINX Plus descarrega tarefas repetitivas de seus servidores de origem, liberando capacidade para atender mais usuários e executar mais aplicações.
  • Maior disponibilidade — O NGINX Plus isola seus usuários de erros catastróficos, fornecendo conteúdo em cache (mesmo que esteja obsoleto) quando os servidores de origem estão inativos.

O NGINX Plus e o NGINX fornecem uma solução consolidada para sua infraestrutura da Web, reunindo um servidor HTTP para conteúdo de origem, gateways de aplicações para FastCGI e outros protocolos, além de um proxy HTTP para servidores upstream. O NGINX Plus adiciona balanceamento de carga de aplicações de nível empresarial, consolidando os balanceadores de carga de front-end em sua infraestrutura da Web.

Em detalhes — armazenamento em cache de conteúdo com o NGINX Plus

O conteúdo em cache é armazenado em um cache persistente no disco e servido pelo NGINX Plus e NGINX exatamente da mesma maneira que o conteúdo de origem.

Para ativar o armazenamento em cache de conteúdo, inclua as diretivas proxy_cache_path e proxy_cache na configuração:

# Define a content cache location on disk
proxy_cache_path /tmp/cache keys_zone=mycache:10m inactive=60m;

server {
    listen 80;
    server_name localhost;
 
    location / {
        proxy_pass http://localhost:8080;
 
       # reference the cache in a location that uses proxy_pass
       proxy_cache mycache;
    }
}

Por padrão, o NGINX Plus e o NGINX adotam uma abordagem segura e cautelosa ao armazenamento em cache de conteúdo. Eles armazenam em cache o conteúdo recuperado por uma solicitação GET ou HEAD, sem uma resposta Set-Cookie, e o tempo de cache é definido pelos cabeçalhos do servidor de origem (X-Accel-Expires, Cache-Control e Expires). O NGINX Plus respeita as extensões Cache-Control definidas no RFC 5861, stale-while-revalidate e stale-if-error.

Cada um desses comportamentos pode ser ampliado e ajustado usando uma série de diretivas. Para uma introdução abrangente, consulte o Guia de administrador do NGINX Plus.

Instrumentação do cache

A API de monitoramento de atividades ao vivo do NGINX Plus relata uma série de estatísticas que podem ser usadas para medir a utilização e a eficácia dos seus caches de conteúdo:

Exemplos de dados JSON da API de monitoramento de atividades ao vivo

Os dados JSON incluem informações completas sobre a atividade do cache.

Gerenciamento de conteúdo desatualizado

Por padrão, o NGINX Plus e o NGINX servem conteúdo em cache enquanto ele for válido. A validade é configurável ou pode ser controlada pelo cabeçalho Cache-Control definido pelo servidor de origem. Após o período de validade, o conteúdo armazenado em cache é considerado obsoleto e deve ser revalidado ao verificar se o conteúdo armazenado em cache ainda é o mesmo encontrado no servidor de origem.

O conteúdo desatualizado pode nunca ser solicitado por um cliente, portanto, o NGINX Plus e o NGINX revalidam o conteúdo desatualizado somente quando ele é solicitado por um cliente. Isso pode ser realizado em segundo plano, sem interromper ou atrasar a solicitação do cliente, atendendo imediatamente o conteúdo desatualizado. O conteúdo desatualizado também é servido quando o servidor de origem está indisponível, proporcionando alta disponibilidade em momentos de pico de carga ou longas interrupções do servidor de origem.

As condições sob as quais o NGINX e o NGINX Plus servem conteúdo desatualizado podem ser configuradas com diretivas ou respeitando os valores encontrados no cabeçalho Cache-Control do servidor de origem, stale-while-revalidate e stale-if-error.

Limpeza do conteúdo do cache

Um dos efeitos colaterais do armazenamento do cache de conteúdo é que as atualizações de conteúdo no servidor de origem não se propagam necessariamente de imediato para o cache, o que significa que os clientes podem continuar recebendo o conteúdo antigo por um período. Se uma operação de atualização alterar vários recursos ao mesmo tempo (por exemplo, alterar um arquivo CSS e imagens referenciadas), é possível que um cliente receba uma mistura de recursos obsoletos e atuais, criando uma apresentação inconsistente.

Com o recurso de limpeza de cache do NGINX Plus, é possível resolver esse problema facilmente. A diretiva proxy_cache_purge permite remover imediatamente as entradas do cache de conteúdo do NGINX Plus que correspondam a um valor configurado. Esse método é mais facilmente acionado por uma solicitação que contém um cabeçalho ou método HTTP personalizado.

Por exemplo, a configuração a seguir identifica solicitações que usam o método PURGE HTTP e exclui URLs correspondentes:

proxy_cache_path /tmp/cache keys_zone=mycache:10m levels=1:2 inactive=60s;

map $request_method $purge_method {
    PURGE 1;
    default 0;
}

server {
    listen 80;
    server_name www.example.com;

    location / {
        proxy_pass http://localhost:8002;
        proxy_cache mycache;

        proxy_cache_purge $purge_method;
    }
}

É possível emitir solicitações de limpeza usando diversas ferramentas, como o comando curl no exemplo a seguir:

$ curl -X PURGE -D – "http://www.example.com/*"
HTTP/1.1 204 No Content
Server: nginx/1.5.12
Date: Sat, 03 May 2014 16:33:04 GMT
Connection: keep-alive

Conforme mostrado no exemplo, é possível limpar um conjunto inteiro de recursos que possuem uma raiz de URL comum, anexando o asterisco (*) curinga para o URL.

Mais informações

O NGINX Plus herda todos os recursos de armazenamento em cache do NGINX. Para obter detalhes, consulte o Guia de administrador do NGINX Plus e a documentação de referência.

Próximos passos