Como configurar cabeçalhos de controle de cache no NGINX
Cache é o processo de armazenar dados baixados para uso posterior, onde podem ser lidos do disco em vez de solicitá-los novamente. Fazer uso adequado do navegador e do cache de CDN pode acelerar significativamente o seu site.
Como funciona o cache?
O navegador de cada usuário tem um cache integrado, que armazena objetos estáticos baixados de sites. Na próxima vez que eles se conectarem, se o objeto que estão solicitando ainda estiver no cache, ele carregará da memória em vez de solicitá-lo novamente, acelerando significativamente o desempenho e reduzindo a carga em seu servidor da web no processo.
O navegador do usuário é um cache do lado do cliente. No entanto, muitos sites grandes também farão uso de Content Delivery Network, ou CDN. O CDN fica na frente de seu servidor da web e armazena em cache suas páginas no lado do servidor, geralmente em vários servidores de borda localizados ao redor do mundo. Isso melhora a latência de acesso, o desempenho e reduz bastante o estresse do servidor da web. Se quiser saber mais sobre os CDNs, você pode ler nosso guia sobre eles aqui.
Cache-Control é um cabeçalho que você pode configurar seu servidor web para adicionar a todas as solicitações de saída. Usando-o, você pode especificar quais recursos são armazenados em cache e por quanto tempo. Há algumas coisas a serem observadas antes de adicioná-lo em todo o site.
Certas páginas nunca devem ser armazenadas em cache. Qualquer coisa que exija que um usuário faça login não deve ser armazenado em cache por um CDN, caso contrário, você correrá o risco de exibir as informações pessoais de um usuário para outras pessoas. Você ainda pode armazenar em cache esses tipos de páginas apenas no navegador (definindo Cache-Control como privado). Como regra geral, se a página for exatamente a mesma para todos os usuários, como sua página inicial, você pode armazená-la em cache. Recursos estáticos, como CSS e imagens, geralmente podem ser armazenados em cache, geralmente por muito mais tempo.
Publicidade
Você também deseja certificar-se de que está definindo valores de Time-To-Live (TTL) razoáveis para cada recurso. O TTL controla quanto tempo o objeto permanecerá no cache antes de ser invalidado, solicitando que o usuário solicite um novo objeto. A compensação aqui é entre um longo tempo de armazenamento em cache e atualizações rápidas. Você não deseja armazenar em cache a sua página inicial por um ano inteiro, porque pode mudar algo na terça-feira. Definir uma idade máxima em torno de alguns minutos para sua página inicial é longo o suficiente para cobrir recarregamentos imediatos e rápido o suficiente para permitir a propagação rápida de atualizações. No entanto, para recursos estáticos como imagens, eles nunca podem mudar, e você deve definir bem valores TTL altos, mesmo que sejam de dois anos.
Você sempre pode usar nomes de arquivos com controle de versão para acionar uma recarga do cache. Se você lançar uma nova versão de uma folha de estilo CSS, você pode chamá-la de styles-1.0.1. css, e o navegador do usuário (e quaisquer CDNs na frente dele) a verá como um novo arquivo que precisa para ser baixado novamente. Além disso, para alguns CDNs, você pode emitir invalidações manuais para liberar o cache existente sem alterar nenhum nome de arquivo.
Como usar o Cache-Control no NGINX
Cache-Control tem algumas opções:
- público – Pode ser armazenado em cache por qualquer pessoa, incluindo navegadores e CDNs. Use-o para a maioria dos objetos estáticos.
- privado – Contém dados confidenciais que não podem ser armazenados em cache por CDNs ou proxies reversos. O navegador do usuário pode armazená-lo em cache localmente. Use isso para a maioria das páginas autenticadas.
- no-cache – Apesar do nome, ele não desativa o cache. O navegador ainda pode armazenar em cache a resposta para desempenho, mas deve verificar com o servidor de origem se há atualizações antes de usá-lo. Use-o se desejar que o usuário revalide a cada vez
- no-store – Desativa o cache completamente. Use isso apenas para dados altamente confidenciais que não devem ser enviados duas vezes.
Ao definir a idade máxima, isso sempre é feito em segundos. No entanto, o NGINX permite mais alguns valores personalizados:
- -1, ou off, que desativará o cache e não modificará os cabeçalhos existentes
- epoch, definido como Unix time zero, que irá desative explicitamente o cache e limpe todos os caches (útil se você &’ estiver usando NGINX como um proxy reverso)
- max, que irá expirar quando o universo terminar, em 31 de dezembro de 2037
- 30s, para segundos
- 1m, para minutos
- 24h, para horas
- 3d, para dias
- 1M, por meses
- 2a, por anos
Além disso, você pode adicionar a diretiva no-transform, que desativa todas as conversões que podem ser feitas para o recurso. Por exemplo, alguns CDNs compactam imagens para reduzir a largura de banda. Esta diretiva desativa esse comportamento.
Para NGINX, você pode modificar os cabeçalhos Cache-Control com as seguintes diretivas:
expira1y; add_header Cache-Control "public, no-transform";
A primeira linha define a idade máxima para 1 ano, e a segunda define as configurações de cache público e sem transformação. Você pode adicionar isso a um bloco de servidor para aplicar em todo o site, mas um método melhor é combinar as extensões de arquivo com um bloco de local para definir valores diferentes, dependendo da extensão do arquivo:
local ~ * \. (?: css | js) $ {expires1y; add_header Cache-Control "public"; }
Publicidade
Este bloco de localização usa uma correspondência de expressão regular, denotada por ~. Isso é útil para aplicar configurações gerais para o tipo de conteúdo. Se quiser fazer exceções para locais específicos, você pode usar um bloco de local regular, que terá precedência sobre uma correspondência de regex.
localização / perfil {expira 2d; add_header Cache-Control "public, no-transform"; }
Você também pode usar o modificador =, que corresponde exatamente aos caminhos e terá precedência sobre uma correspondência de regex e um bloco de localização padrão.
Use Surrogate-Control para modificar o comportamento do CDN
Embora você possa desativar o cache de CDN e ainda aproveitar o cache do navegador usando Cache-Control: private, é melhor ter controle direto sobre ele. A maioria dos CDNs respeitará o cabeçalho Surrogate-Control, que funciona exatamente da mesma forma que o Cache-Control, exceto para CDNs. Dessa forma, você pode dizer ao Fastly para fazer uma coisa e ao usuário fazer outra.
Em NGINX, você terá que definir este cabeçalho manualmente e definir o valor de idade máxima em vez de usar a diretiva de expiração do NGINX.
add_header Surrogate-Control "public, max-age = 86400"; add_header Cache-Control "public, max-age = 120";
Definitivamente, você desejará testar com seu CDN para verificar se ele funciona — Surrogate-Control é relativamente novo e não é universal.
Nenhum comentário