
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 -tSe não existir nenhum erro, recarregue a configuração:
sudo systemctl reload nginxPara 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.
