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

Romain Drouche

Especialista em infraestruturas de TI com mais de 15 anos de experiência na área. Atualmente, como Gestor de Projetos de Sistemas e Redes e especialista em Segurança de Sistemas de Informação (SSI), utilizo a minha expertise para garantir a fiabilidade e a segurança dos ambientes tecnológicos.

GHinM▶