Nginx: Configurar o Cache Fastcgi com o WordPress

Neste tutorial, vou explicar como configurar a cache fastcgi com o WordPress para armazenar em cache páginas geradas com PHP, de forma a aumentar a velocidade de um site WordPress e reduzir a carga do servidor.

Com a ativação da cache fastcgi, as páginas geradas em PHP serão armazenadas em cache ao nível do Nginx, com esta cache, quando a página é chamada e está na cache, seria servida diretamente sem gerar código PHP e consequentemente consultas SQL.

Para explorar plenamente esta solução, o site deve ser acessível principalmente no modo “convidado”, sem autenticação.

Vamos lá, aqui estão as linhas de configuração a adicionar:

Na parte http{ … } do ficheiro nginx. conf ou no ficheiro de host virtual do site com o bloco server { … }, adicione as seguintes linhas que lhe permitirão declarar a cache ao nível do Nginx.

# fastcgi cache
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=wpcache:200m max_size=10g inactive=2h use_temp_path=off;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
  • fastcgi_cache_path : especifica o local da cache e os parâmetros da cache
  • keys_zone : O atributo define o nome da cache e o tamanho da área de memória partilhada. 200 m são suficientes para armazenar mais de um milhão de chaves.
  • max_size : tamanho máximo da cache no disco
  • inactive : tempo de vida da cache quando não está a ser utilizada, aqui 2 horas
  • fastcgi_cache_key : permite gerar o identificador de cache (chave)
  • fastcgi_ignore_header : permite desativar a cache com base em determinados cabeçalhos HTTP.

O seguinte deve ser adicionado na parte do servidor { … } do virtualhost.

Podem ser especificadas exceções quando o cache não deve ser utilizado:

set $skip_cache 0;

if ($request_method = POST) {
set $skip_cache 1;
}
if ($query_string != "") {
set $skip_cache 1;
}

if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|^/feed/*|/tag/.*/feed/*|index.php|/.*sitemap.*\.(xml|xsl)") {
set $skip_cache 1;
}

if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
set $skip_cache 1;
}

Na secção que trata da execução do código PHP adicione as seguintes linhas:

location ~ \.php$ {
...
fastcgi_cache wpcache;
fastcgi_cache_valid 200 301 302 2h;
fastcgi_cache_use_stale error timeout updating invalid_header http_500 http_503;
fastcgi_cache_min_uses 1;
fastcgi_cache_lock on;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
add_header X-FastCGI-Cache $upstream_cache_status;
}
  • fastcgi_cache : ativar o cache e especificar o nome do cache a utilizar
  • fastcgi_cache_valid : determina o tempo de vida da cache com base no código HTTP
  • fastcgi_cache_use_stale error : determina as condições em que o Nginx deve fornecer conteúdo obsoleto.
  • fastcgi_cache_min_uses : determina quando o cache deve ser utilizado com base no número de pedidos.
  • fastcgi_cache_lock : comportamento para pedidos simultâneos.
  • fastcgi_cache_bypass : Bypass de cache utilizando a variável $skip_cache
  • fastcgi_no_cache : Bypass de cache utilizando a variável $skip_cache

Teste a configuração do Nginx:

sudo nginx -t

Se não existir nenhum erro, recarregue a configuração:

sudo systemctl reload nginx

Para testar a função de cache, aceda ao site WordPress como visitante ligado e abra as ferramentas de programador do browser (F12).

Aceda a uma página do site e veja os cabeçalhos de resposta.

Como é o primeiro carregamento de página, a cache não está disponível (MISS) olhando para o cabeçalho X-Fastcgi-Cache.

Recarregue a página:

Desta vez foi utilizado o cache e podemos vê-lo com o cabeçalho X-Fastcgi-Cache, que está definido como HIT.

Para finalizar este tutorial, irei explicar como limpar a cache. No WordPress, existe um plugin que permite gerir a cache Fastcgi do Nginx, chamado Nginx Helper. Para funcionar, precisa do módulo libnginx-mod-http-cache-purge. Esta solução funciona numa instalação padrão.

Quer esteja num contentor ou não, a maneira mais fácil de limpar a cache é limpar a pasta de cache e recarregar a configuração do Nginx:

rm -rf /etc/nginx/cache/
/etc/init.d/nginx reload

Agora já sabe como configurar a cache Fastcgi no Nginx para WordPress.

Romain Drouche
Arquiteto de Sistemas | MCSE: Infraestrutura Essencial
Especialista em infraestrutura de TI com mais de 15 anos de experiência na área. Atualmente, como Gerente de Projetos de Sistemas e Redes e especialista em Segurança de Sistemas de Informação (SSI), utilizo minha expertise para garantir a confiabilidade e a segurança de ambientes tecnológicos.

Deixe um comentário