Como cache o conteúdo do nginx

Como cache o conteúdo do nginx

Nginx Sendo um servidor web de alto desempenho consolidado e de alto desempenho que acelera o conteúdo e a entrega de aplicativos, aprimora a segurança e melhora a escalabilidade. Um dos casos de uso mais comuns de Nginx é um Cache de conteúdo, Qual é a maneira mais eficaz de aumentar o desempenho de um site.

Leia também: 10 ferramentas principais de cache de código aberto para Linux

Você pode usar Nginx Para acelerar os servidores de origem local, configurando -o para armazenar respostas de cache de servidores upstream e também para criar servidores Edge para redes de entrega de conteúdo (CDNs). Nginx alimenta alguns dos maiores CDNs.

Quando configurado como um cache, o nginx irá:

  • conteúdo estático e dinâmico de cache.
  • melhorar o desempenho dinâmico de conteúdo com micro-cache.
  • Sirva conteúdo obsoleto ao revisar em segundo plano para melhor desempenho.
  • substituir ou defina cabeçalhos de controle de cache e mais.

Neste artigo, você aprenderá a configurar Nginx como um Cache de conteúdo no Linux para fazer seus servidores da web funcionarem da maneira mais eficiente possível.

Pré -requisitos:

Você devia ter Nginx Instalado no seu servidor Linux, se não seguir estes guias para instalar o nginx:

  • Como instalar o nginx no CentOS 8
  • Como instalar o nginx no CentOS 7

Conteúdo estático de cache no nginx

O conteúdo estático é o conteúdo de um site que permanece o mesmo (não muda) nas páginas. Exemplos de conteúdo estático incluem arquivos como imagens, vídeos, documentos; Arquivos CSS e arquivos JavaScript.

Se o seu site usar muito conteúdo estático, você poderá otimizar seu desempenho, permitindo o cache do lado do cliente, onde o navegador armazena cópias de conteúdo estático para acesso mais rápido.

A seguinte configuração de amostra é uma boa chance, apenas substitua www.exemplo.com com o URL do nome do seu site e faça modificações em outros nomes de caminho, conforme apropriado.

Servidor  # Substitua o URL do seu servidor da web por www.exemplo.com server_name www.exemplo.com; raiz/var/www/exemplo.com/htdocs; ÍNDICE ÍNDICE.php; access_log/var/log/nginx/exemplo.com.acesso.registro; error_log/var/log/nginx/exemplo.com.erro.registro; Localização / Try_files $ URI $ URI / / ÍNDICE.php?$ args;  localização ~ .php $ try_files $ uri = 404; incluir fastcgi_params; # Substitua o soquete, ou endereço e porta, do seu servidor wordpress fastcgi_pass unix:/var/run/php5-fpm.meia; #fastcgi_pass 127.0.0.1: 9000;  localização ~* .(ogg | ogv | svg | svgz | eot | otf | woff | mp4 | ttf | css | rss | atom | js | jpg | jpeg | gif | png | ico | zip | tgz | gz | rar | bz2 | | exe | ppt | tar | midi | midi | wav | bmp | rtf) $ expire max; log_not_found off; access_log off;  

Conteúdo dinâmico de cache no nginx

Nginx usa um cache persistente baseado em disco localizado em algum lugar do sistema de arquivos local. Então comece criando o diretório de disco local para armazenar conteúdo em cache.
# mkdir -p/var/cache/nginx

Em seguida, defina a propriedade apropriada no diretório de cache. Deve ser de propriedade do Nginx do utilizador (nginx) e grupo (nginx) do seguinte modo.

# chown nginx: nginx/var/cache/nginx 

Agora prossiga para ver como ativar o conteúdo dinâmico no Nginx na seção abaixo.

Permitindo o cache fastcgi no nginx

Fastcgi (ou FCGI) é um protocolo amplamente usado para interface aplicativos interativos, como Php com servidores da web como Nginx. É uma extensão do CGI (Interface de gateway comum).

A principal vantagem de FCGI é que ele gerencia várias solicitações de CGI em um único processo. Sem ele, o servidor da web precisa abrir um novo processo (que deve ser controlado, processar uma solicitação e ser fechado) para cada solicitação de cliente para um serviço.

Para processar Php scripts em uma implantação de pilha de lemp, Nginx usos FPM (Gerenciador de processos FastCGI) ou PHP-FPM, uma implementação alternativa popular de php fastcgi. Uma vez o PHP-FPM O processo está em execução, Nginx está configurado para solicitações de proxy para processamento. Assim, o nginx também pode ser configurado para cache as respostas do PHP-FPM Servidor de aplicativos de back -end.

Sob Nginx, o Fastcgi O cache de conteúdo é declarado usando uma diretiva chamada fastcgi_cache_path no nível superior http contexto, dentro da estrutura de configuração do Nginx. Você também pode adicionar o fastcgi_cache_key que define uma chave (identificador de solicitação) para armazenamento em cache.

Além disso, para ler o status do cache a montante, adicione o add_header x-cache-status diretiva dentro do http Contexto - isso é útil para fins de depuração.

Supondo que o arquivo de configuração do bloco de servidor do seu site esteja localizado em /etc/nginx/conf.D/TestApp.conf ou /etc/nginx/sites-disponível/testapp.conf (sob o Ubuntu e seus derivados), abra o arquivo de edição e adicione as seguintes linhas na parte superior do arquivo.

fastcgi_cache_path/var/cache/nginx níveis = 1: 2 keys_zone = cachezone: 10m; inativo = 60m max_size = 40m; fastcgi_cache_key "$ esquema $ request_method $ host $ request_uri"; add_header x-cache $ upstream_cache_status; 
Ativar cache fastcgi no nginx

O fastcgi_cache_path Diretiva especifica o número de parâmetros que são:

  • /var/cache/nginx - O caminho para o diretório de disco local para o cache.
  • níveis - define os níveis de hierarquia de um cache, ele estabelece uma hierarquia de diretório de dois níveis em /var/cache/nginx.
  • keys_zone (nome: tamanho) - Ativa a criação de uma zona de memória compartilhada, onde todas as teclas e informações ativas sobre dados (meta) são armazenadas. Observe que armazenar as teclas na memória acelera o processo de verificação, facilitando o nginx para determinar se é um PERDER ou BATER, sem verificar o status no disco.
  • inativo - Especifica a quantidade de tempo após o qual os dados em cache que não são acessados ​​durante o tempo especificado são excluídos do cache, independentemente de sua frescura. Um valor de 60m Em nosso exemplo de configuração, os arquivos não acessados ​​após 60 serão removidos do cache.
  • tamanho máximo - Especifica o tamanho máximo do cache. Existem mais parâmetros que você pode usar aqui (leia a documentação do nginx para obter mais informações).

As variáveis ​​no fastcgi_cache_key A diretiva é descrita abaixo.

Nginx os usa no cálculo da chave (identificador) de uma solicitação. É importante ressaltar que, para enviar uma resposta em cache ao cliente, a solicitação deve ter a mesma chave que uma resposta em cache.

  • $ esquema - Esquema de solicitação, http ou https.
  • $ request_method - Método de solicitação, geralmente “PEGAR" ou "PUBLICAR”.
  • $ host - Isso pode ser nome de host da linha de solicitação ou nome de host do “HospedarSolicite o campo do cabeçalho, ou o nome do servidor que corresponda a uma solicitação, na ordem de precedência.
  • $ request_uri - significa a solicitação original completa URI (com argumentos).

Também o $ upstream_cache_status variável no add_header x-cache-status A diretiva é calculada para cada solicitação a que o nginx responde, seja um PERDER (Resposta não encontrada no cache, obtida no servidor de aplicativos) ou um BATER (resposta servida do cache) ou qualquer um dos outros valores suportados.

Em seguida, dentro do localização Diretiva que passa solicitações de PHP para PHP-FPM, usa o fastcgi_cache Diretivas para ativar o cache que você acabou de definir acima.

Também defina o tempo de cache para diferentes respostas usando o fastcgi_cache_valid diretiva como mostrado.

fastcgi_cache cacheZone; fastcgi_cache_valid 60m; 
Defina a zona de cache e o tempo

Se apenas o tempo de cache for especificado como no nosso caso, apenas 200, 301, e 302 As respostas são armazenadas em cache. Mas você também pode especificar as respostas explicitamente ou usar qualquer (para qualquer código de resposta):

fastcgi_cache cacheZone; fastcgi_cache_valid 200 301 203 60m; fastcgi_cache_valid 404 10m; Ou fastcgi_cache cacheZone; fastcgi_cache_valid qualquer 10m; 

Desempenho fastcgi de ajuste fino no nginx

Para definir o número mínimo de vezes, uma solicitação com a mesma chave deve ser feita antes que a resposta seja armazenada em cache, inclua o fastcgi_cache_min_uss diretiva, seja no http ou servidor ou localização contexto.

fastcgi_cache_min_uss 3 
Defina o uso mínimo de cache

Para permitir a re-validação de itens de cache expirados usando solicitações condicionais com o “Se modificado-uma vez" e "Se não-a correspondência"Campos de cabeçalho, adicione o fastcgi_cache_revalidate diretiva, dentro do http ou servidor ou localização contexto.

fastcgi_cache_revalidate em; 
Defina a re-validação do cache

Você também pode instruir Nginx Para fornecer conteúdo em cache quando o servidor de origem ou o servidor FCGI estiver inativo, usando o proxy_cache_use_stale Diretiva, dentro da diretiva de localização.

Esta configuração de amostra significa que quando Nginx Recebe um erro, tempo limite e qualquer um dos erros especificados do servidor upstream e possui uma versão obsoleta do arquivo solicitado no conteúdo em cache, ele entrega o arquivo obsoleto.

proxy_cache_use_stale Timeout de erro http_500; 
Ativar a porção de dados obsoletos

Outra diretiva útil para ajustar o desempenho do cache do FCGI é fastcgi_cache_background_update que funciona em conjunto com o proxy_cache_use_stale diretivo. Quando definido, ele instrui o nginx a servir conteúdo obsoleto quando os clientes solicitam um arquivo que expire ou está no processo de ser atualizado do servidor upstream.

fastcgi_cache_background_update ON; 
Ativar atualização de fundo do cache

O fastcgi_cache_lock É útil também, para o desempenho do cache, se o ajuste fino, pois se vários clientes solicitarem o mesmo conteúdo que não estiver no cache, o Nginx encaminhará apenas a primeira solicitação ao servidor upstream, cache a resposta e sirva as outras solicitações do cliente do cache.

fastcgi_cache_lock ON; 
Ativar bloqueio de cache

Depois de fazer todas as mudanças acima no Nginx arquivo de configuração, salve e feche -o. Em seguida, verifique a estrutura de configuração para obter erros de sintaxe antes de reiniciar o serviço Nginx.

# nginx -t # systemctl reinicie nginx 
Verifique e inicie o serviço nginx

Em seguida, teste se o cache está funcionando corretamente, tente acessar seu aplicativo ou site da web de usar o seguinte comando curl (a primeira vez deve indicar um PERDER, mas solicitações subsequentes devem indicar um BATER como mostrado na captura de tela).

# Curl -i http: // testapp.Tecmint.com 
Teste o cache fastcgi

Aqui está outra captura de tela mostrando o nginx que serve dados obsoletos.

Teste os dados obsoletos do Nginx Serving

Adicionando exceções ao contorno do cache

É possível definir condições sob as quais Nginx não deve enviar respostas em cache aos clientes, usando o fastcgi_cache_bypass diretivo. E para instruir o nginx a não cache as respostas do servidor a montante, use o fastcgi_no_cache.

Por exemplo, se você quiser PUBLICAR pedidos e URLs com uma sequência de consulta para sempre ir para o PHP. Primeiro, declare uma declaração IF para definir a condição da seguinte forma.

Definir $ skip_cache 0; if ($ request_method = post) set $ skip_cache 1;  

Em seguida, ative a exceção acima no localização Diretiva que passa solicitações de PHP para PHP-FPM, usando o fastcgi_cache_bypass e fastcgi_no_cache diretivas.

 fastcgi_cache_bypass $ skip_cache; fastcgi_no_cache $ skip_cache; 

Existem muitas outras partes do seu site para as quais você pode não querer ativar o cache de conteúdo. A seguir, é apresentado um exemplo de configuração nginx para melhorar o desempenho de um site WordPress, fornecido no nginx.com blog.

Para usá -lo, faça alterações (como o domínio, caminhos, nomes de arquivos, etc.) para refletir o que existe em seu ambiente.

fastcgi_cache_path/var/run/nginx-cache níveis = 1: 2 keys_zone = wordpress: 100m inactive = 60m; fastcgi_cache_key "$ esquema $ request_method $ host $ request_uri"; Exemplo de servidor server_name.com www.exemplo.com; raiz/var/www/exemplo.com; ÍNDICE ÍNDICE.php; access_log/var/log/nginx/exemplo.com.acesso.registro; error_log/var/log/nginx/exemplo.com.erro.registro; Definir $ skip_cache 0; # Solicitações de postagem e URLs com uma sequência de consulta sempre deve ir para php se ($ request_method = post) set $ skip_cache 1;  if ($ query_string != "") set $ skip_cache 1;  # Não cache Uris contendo os seguintes segmentos se ($ request_uri ~* "/wp-admin/|/xmlrpc.php | wp-.*.php |/feed/| índice.php | sitemap (_index)?.xml ") set $ skip_cache 1; # não use o cache para usuários logados ou comentaristas recentes if ($ http_cookie ~*" comment_author | wordpress_ [a-f0-9]+| wp-postpass | wordpress_no_cache | wordpress_logged_in ") set $ skip_cache 1; localização / try_files $ uri $ uri / / Índice.php?$ args;  localização ~ .php $ try_files $ uri /índice.php; incluir fastcgi_params; fastcgi_pass unix:/var/run/php5-fpm.meia; fastcgi_cache_bypass $ skip_cache; fastcgi_no_cache $ skip_cache; fastcgi_cache wordpress; fastcgi_cache_valid 60m;  localização ~ /purga ( / /.*) fastcgi_cache_purge wordpress "$ esquema $ request_method $ host $ 1";  localização ~* ^.+.(ogg | ogv | svg | svgz | eot | otf | woff | mp4 | ttf | css | rss | atom | js | jpg | jpeg | gif | png | ico | zip | tgz | gz | rar | bz2 | | exe | ppt | tar | midi | midi | wav | bmp | rtf) $ access_log off; log_not_found off; expire max;  localização = /robôs.txt access_log off; log_not_found off;  localização ~ / / /. negar tudo; access_log off; log_not_found off;  

Ativar cache de proxy no nginx

Nginx também suporta o cache de respostas de outros servidores proxiados (definidos pelo proxy_pass diretivo). Para este caso de teste, estamos usando o nginx como proxy reverso para um nó.Aplicativo da Web JS, então ativaremos o Nginx como um cache para o nó.Aplicação JS. Todas as diretivas de configuração usadas aqui têm significados semelhantes às diretivas fastcgi na seção anterior, para que não as expliquem novamente.

Para ativar o cache de respostas de um servidor proxado, inclua o proxy_cache_path diretiva no nível superior http contexto. Para especificar como as solicitações são armazenadas em cache, você também pode adicionar o proxy_cache_key diretiva como segue.

proxy_cache_path/var/cache/nginx app1 keys_zone = proxycache: 100m inactive = 60m max_size = 500m; proxy_cache_key "$ esquema $ request_method $ host $ request_uri"; add_header x-cache-status $ upstream_cache_status; proxy_cache_min_uses 3; 

Em seguida, ative o cache na diretiva de localização.

Localização/proxy_pass http: // 127.0.0.1: 3000; proxy_cache proxycache; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1M;  

Para definir condições sob as quais o Nginx não envia conteúdo em cache e não cache uma resposta de nada do servidor upstream, inclua o proxy_cache_bypass e proxy_no_cache.

 proxy_cache_bypass $ cookie_nocache $ arg_nocache $ arg_comment; proxy_no_cache $ http_pragma $ http_authorization; 

Desempenho de cache proxy de ajuste fino

As diretivas a seguir são úteis para ajustar o desempenho do cache proxy. Eles também têm os mesmos significados que as diretivas fastcgi.

proxy_cache_min_uses 3; proxy_cache_revalidate em; Proxy_cache_use_stale Timeout Erro Atualizando HTTP_500; proxy_cache_background_update ON; proxy_cache_lock ON; 

Para obter mais diretivas de configuração de informações e cache, consulte a documentação para os dois módulos principais ngx_http_fastcgi_module e ngx_http_proxy_module.

Recursos adicionais: cache de conteúdo nginx e dicas para melhorar o desempenho do WordPress.