Pular para conteúdo

Purgação de Cache do WordPress em VPS

Invalidacão instantânea e automática de cache para WordPress em qualquer VPS ou servidor dedicado baseado em RHEL.


  • Invalidacão Automática


    O cache é purgado automaticamente quando você edita posts, páginas ou comentários

  • Precisão Cirúrgica


    Apenas a página alterada é purgada—todo o seu site permanece em cache e rápido

  • Configuração em 5 Minutos


    Configuração simples com nossos módulos NGINX pré-construídos

  • Cache Baseado em Disco


    O cache sobrevive a reinicializações do NGINX—sem cache frio após atualizações


Pré-requisitos

  • Um VPS ou servidor dedicado rodando RHEL 7/8/9, Rocky Linux, AlmaLinux ou Amazon Linux
  • NGINX instalado (recomendado a partir do repositório GetPageSpeed)
  • Site WordPress com cache de página completa configurado

Configuração Rápida

Passo 1: Instalar o Módulo de Purgação de Cache

# Instalar repositório GetPageSpeed
dnf -y install https://extras.getpagespeed.com/release-latest.rpm

# Instalar o módulo de purgação de cache
dnf -y install nginx-module-cache-purge

Ative o módulo em /etc/nginx/nginx.conf:

load_module modules/ngx_http_cache_purge_module.so;

Passo 2: Configurar o Cache Proxy do NGINX

Se você ainda não tiver o cache proxy configurado, aqui está uma configuração completa:

Edite /etc/nginx/nginx.conf ou crie /etc/nginx/conf.d/proxy-cache.conf:

# Definir zona de cache (no bloco http)
proxy_cache_path /var/cache/nginx/wordpress
                 levels=1:2
                 keys_zone=wordpress:100m
                 max_size=10g
                 inactive=60m
                 use_temp_path=off;

No seu bloco de servidor:

server {
    listen 80;
    server_name example.com;

    # Habilitar cache
    proxy_cache wordpress;
    proxy_cache_valid 200 60m;
    proxy_cache_valid 404 1m;
    proxy_cache_key "$scheme$request_method$host$request_uri";

    # Adicionar cabeçalho de status do cache
    add_header X-Cache-Status $upstream_cache_status;

    # Habilitar método PURGE (apenas localhost)
    proxy_cache_purge PURGE from 127.0.0.1;

    location / {
        proxy_pass http://127.0.0.1:8080;  # Seu backend
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Crie o diretório de cache:

mkdir -p /var/cache/nginx/wordpress
chown nginx:nginx /var/cache/nginx/wordpress
nginx -t && systemctl reload nginx

Passo 3: Instalar o Plugin Proxy Cache Purge

  1. Vá para Plugins → Adicionar Novo
  2. Pesquise por "Proxy Cache Purge" (slug: varnish-http-purge)
  3. Clique em Instalar Agora, depois Ativar
wp plugin install varnish-http-purge --activate

Passo 4: Configurar Proxy Cache Purge

No admin do WordPress:

  1. Vá para Configurações → Proxy Cache Purge
  2. Defina "Definir IP Personalizado" para: 127.0.0.1
  3. Clique em Salvar Configurações

Configuração Crítica

O plugin deve enviar requisições PURGE para 127.0.0.1 (localhost), não para seu IP público.


Passo 5: Configurar Backend de Cache do NGINX

A partir da versão Proxy Cache Purge 5.9.0, o plugin suporta nativamente o formato de purgação wildcard do NGINX. Configure-o para usar o backend do NGINX:

  1. Vá para Proxy Cache Purge → Configurações
  2. Em Cache Backend, selecione NGINX
  3. 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 usando o Proxy Cache Purge anterior a 5.9.0, crie wp-content/mu-plugins/nginx-cache-purge-fix.php:

<?php
/**
 * Nome do Plugin: NGINX Cache Purge Fix
 * Descrição: Anexa wildcard para URLs de purgação para compatibilidade com o cabeçalho Vary
 */
add_filter("vhp_purgeme_path", function($purgeme, $schema, $host, $path, $pregex, $p) {
    if (empty($pregex)) {
        $purgeme .= "*";
    }
    return $purgeme;
}, 10, 6);

Testar a Configuração

# 1. Cache uma página
curl -sI http://127.0.0.1/sample-page/ -H 'Host: example.com' | grep X-Cache
# X-Cache-Status: MISS (primeira requisição)
curl -sI http://127.0.0.1/sample-page/ -H 'Host: example.com' | grep X-Cache
# X-Cache-Status: HIT (cacheado!)

# 2. Purge a página
curl -sX PURGE 'http://127.0.0.1/sample-page/*' -H 'Host: example.com'
# <h1>Purgado com sucesso</h1>

# 3. Verifique se o cache foi limpo
curl -sI http://127.0.0.1/sample-page/ -H 'Host: example.com' | grep X-Cache
# X-Cache-Status: MISS (limpo!)

Como Funciona

flowchart LR
    subgraph WP["WordPress"]
        A["📝 Post Atualizado"] --> B["🔌 Plugin"]
    end

    B -->|"PURGE /post/*"| C

    subgraph NG["NGINX"]
        C["🗑️ cache_purge"] --> D["✅ Página removida"]
    end

    E["👤 Visitante"] -->|"GET /post/"| NG
    D --> F["Conteúdo fresco servido"]

    style WP fill:#4a90d9,stroke:#2d5986,color:#fff
    style NG fill:#009639,stroke:#006325,color:#fff

Dicas de Desempenho

  • Use Disco RAM para Cache Quente


    Monte /var/cache/nginx como tmpfs para leituras de cache o mais rápidas possível

    mount -t tmpfs -o size=2G tmpfs /var/cache/nginx
    
  • Normalize os Cabeçalhos de Compressão


    Reduza as variantes de cache com o módulo compression-normalize

  • Ignorar Cache para Usuários Logados


    proxy_cache_bypass $cookie_wordpress_logged_in;
    

Considerações de Segurança

A restrição from 127.0.0.1 é crítica:

proxy_cache_purge PURGE from 127.0.0.1;

Sem isso, qualquer um poderia purgar seu cache enviando requisições PURGE.

Para segurança adicional, você também pode:

# Permitir PURGE apenas de IPs específicos
proxy_cache_purge PURGE from 127.0.0.1 10.0.0.0/8;

# Ou exigir autenticação
# (não coberto neste guia)

Solução de Problemas

X-Cache-Status sempre mostra MISS
  • Verifique se a diretiva proxy_cache está habilitada
  • Verifique se o diretório de cache existe e é gravável pelo nginx
  • Verifique se as regras de proxy_cache_bypass não estão sempre sendo acionadas
PURGE retorna 404
  • Certifique-se de que a diretiva proxy_cache_purge está no bloco de localização correto
  • Verifique se o módulo está carregado: nginx -V 2>&1 | grep cache_purge
Diretório de cache enchendo
  • Ajuste max_size em proxy_cache_path
  • Reduza o tempo limite inactive
  • Execute nginx -s reload para acionar a limpeza do gerenciador de cache

Relacionados