Purgação de Cache FastCGI para PHP-FPM
Cache ultra-rápido para WordPress com invalidação de cache automática e cirúrgica.
-
Nenhum Proxy Necessário
O cache FastCGI se comunica diretamente com o PHP-FPM—sem sobrecarga de proxy reverso
-
Resposta em Microsegundos
Páginas em cache servidas diretamente da memória ou SSD pelo NGINX
-
Purgação Seletiva
Apenas páginas alteradas são purgadas, o restante do cache permanece ativo
-
Segurança Integrada
Ignora o cache para usuários logados, administradores e carrinhos do WooCommerce
Quando Usar FastCGI vs Proxy Cache
| Recurso | Cache FastCGI | Cache Proxy |
|---|---|---|
| Backend | PHP-FPM (direto) | Qualquer backend HTTP |
| Latência | Menor (sem salto de proxy) | Um pouco maior |
| Caso de uso | WordPress, aplicativos PHP | Node.js, Python, etc. |
| Complexidade de configuração | Mais simples | Mais flexível |
Use o cache FastCGI se você estiver executando WordPress ou PHP diretamente no NGINX sem uma camada de proxy reverso.
Configuração Rápida
Passo 1: Instalar Módulos Necessários
# Instalar repositório GetPageSpeed
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
# Instalar módulo de purgação de cache
dnf -y install nginx-module-cache-purge
Habilite em /etc/nginx/nginx.conf:
load_module modules/ngx_http_cache_purge_module.so;
Passo 2: Configurar Cache FastCGI
Adicione ao seu bloco http em /etc/nginx/nginx.conf:
# Definição da zona de cache FastCGI
fastcgi_cache_path /var/cache/nginx/fastcgi
levels=1:2
keys_zone=WORDPRESS:100m
max_size=10g
inactive=60m
use_temp_path=off;
# Chave de cache (o que torna cada página em cache única)
fastcgi_cache_key "$scheme$request_method$host$request_uri";
Passo 3: Configurar Bloco de Servidor
Crie ou atualize seu bloco de servidor do WordPress:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.php;
# Configurações de cache
set $skip_cache 0;
# Não cachear requisições POST
if ($request_method = POST) {
set $skip_cache 1;
}
# Não cachear URLs com strings de consulta
if ($query_string != "") {
set $skip_cache 1;
}
# Não cachear admin do WordPress, login ou caminhos específicos
if ($request_uri ~* "/wp-admin/|/wp-login.php|/xmlrpc.php|/wp-cron.php") {
set $skip_cache 1;
}
# Não cachear para usuários logados ou comentaristas recentes
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_logged_in") {
set $skip_cache 1;
}
# Não cachear páginas do WooCommerce
if ($request_uri ~* "/cart/|/checkout/|/my-account/") {
set $skip_cache 1;
}
if ($http_cookie ~* "woocommerce_cart_hash|woocommerce_items_in_cart") {
set $skip_cache 1;
}
# Cabeçalho de status do cache
add_header X-Cache-Status $upstream_cache_status;
# Habilitar método PURGE
fastcgi_cache_purge PURGE from 127.0.0.1;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
# Cache FastCGI
fastcgi_cache WORDPRESS;
fastcgi_cache_valid 200 60m;
fastcgi_cache_valid 404 1m;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
# Importante para conteúdo dinâmico
fastcgi_cache_use_stale error timeout invalid_header http_500 http_503;
fastcgi_cache_lock on;
}
# Arquivos estáticos - nenhuma configuração de cache necessária
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
}
Crie o diretório de cache e recarregue:
mkdir -p /var/cache/nginx/fastcgi
chown nginx:nginx /var/cache/nginx/fastcgi
nginx -t && systemctl reload nginx
Passo 4: Instalar Plugin do WordPress
- Vá para Plugins → Adicionar Novo
- Pesquise por "Proxy Cache Purge"
- Instale e ative
wp plugin install varnish-http-purge --activate
Configure o plugin:
- Vá para Configurações → Proxy Cache Purge
- Defina IP Personalizado para
127.0.0.1 - Salve
Passo 5: Configurar Backend de Cache NGINX
A partir da versão Proxy Cache Purge 5.9.0, o plugin suporta nativamente o formato de purgação curinga do NGINX. Configure-o para usar o backend NGINX:
- Vá para Proxy Cache Purge → Configurações
- Em Cache Backend, selecione NGINX
- Clique em Salvar Configurações
Adicione ao seu wp-config.php:
define( 'VHP_PURGE_BACKEND', 'nginx' );
Legado: Versão do plugin < 5.9.0
Se você estiver executando o Proxy Cache Purge anterior a 5.9.0, crie
wp-content/mu-plugins/nginx-cache-purge-fix.php:
<?php
/**
* Nome do Plugin: Correção de Purgação de Cache FastCGI NGINX
* Descrição: Adiciona curinga para purgar todas as variantes de cache
*/
add_filter("vhp_purgeme_path", function($purgeme, $schema, $host, $path, $pregex, $p) {
if (empty($pregex)) {
$purgeme .= "*";
}
return $purgeme;
}, 10, 6);
Testando
# Primeiro pedido - deve ser MISS
curl -sI http://127.0.0.1/ -H 'Host: example.com' | grep X-Cache
# X-Cache-Status: MISS
# Segundo pedido - deve ser HIT
curl -sI http://127.0.0.1/ -H 'Host: example.com' | grep X-Cache
# X-Cache-Status: HIT
# Purgar o cache
curl -sX PURGE 'http://127.0.0.1/*' -H 'Host: example.com'
# Verificar purgado
curl -sI http://127.0.0.1/ -H 'Host: example.com' | grep X-Cache
# X-Cache-Status: MISS
Como Funciona
flowchart LR
A["👤 Visitante"] -->|"GET /post/"| B["NGINX"]
B -->|"Cache HIT"| C["⚡ Resposta Instantânea"]
B -->|"Cache MISS"| D["PHP-FPM"]
D --> E["WordPress"]
E --> D
D -->|"Armazenar em cache"| B
B --> C
style A fill:#667eea
style B fill:#009639,color:#fff
style C fill:#48bb78,color:#fff
style D fill:#4a90d9,color:#fff
style E fill:#4a90d9,color:#fff
Comparação de Desempenho
| Métrica | Sem Cache | Cache FastCGI |
|---|---|---|
| Tempo de Resposta | 200-500ms | 5-20ms |
| Requisições/segundo | 50-100 | 5.000+ |
| Uso de CPU | Alto | Mínimo |
| Memória | Alta (PHP) | Baixa (NGINX) |
Impacto no mundo real
O cache FastCGI geralmente melhora os tempos de resposta do WordPress em 10-50x e pode lidar com picos de tráfego sem dificuldades.
Configuração Avançada
Cache Diferentes Durações por Tipo de Conteúdo
# Cachear páginas por 60 minutos
fastcgi_cache_valid 200 60m;
# Cachear redirecionamentos por 10 minutos
fastcgi_cache_valid 301 302 10m;
# Não cachear erros por muito tempo
fastcgi_cache_valid 404 1m;
fastcgi_cache_valid 500 502 503 504 0;
Servir Conteúdo Obsoleto Durante Erros
fastcgi_cache_use_stale error timeout invalid_header
updating http_500 http_502 http_503 http_504;
Bloqueio de Cache para Prevenir Stampedes
fastcgi_cache_lock on;
fastcgi_cache_lock_timeout 5s;
Quando múltiplas requisições atingem uma página não cacheada simultaneamente, apenas uma requisição vai para o PHP-FPM. As outras aguardam o cache ser populado.
Resolução de Problemas
Páginas não estão sendo cacheadas
Verifique a variável $skip_cache. Problemas comuns:
- Strings de consulta em todas as URLs (alguns plugins adicionam
?ver=às páginas) - Cookies sendo definidos em todas as páginas
- Verifique:
curl -sI sua-url | grep Set-Cookie
Páginas logadas estão sendo cacheadas
Verifique se a verificação de cookies inclui seus cookies de autenticação:
if ($http_cookie ~* "wordpress_logged_in") {
set $skip_cache 1;
}
Cache não está purgando
- Verifique a configuração do plugin: IP Personalizado =
127.0.0.1 - Certifique-se de que o Cache Backend está definido como NGINX (ou
VHP_PURGE_BACKENDestá definido emwp-config.php) - Teste manualmente:
curl -X PURGE 'http://127.0.0.1/page/*'
Relacionados
-
Guia de Cache Proxy
Alternativa para backends não-PHP
-
Módulo cache-purge
Referência completa de diretivas
-
Módulo PageSpeed
Camada adicional de otimização