cache-purge: Módulo de Purga de Cache do NGINX
Requer o plano Pro (ou superior) da assinatura GetPageSpeed NGINX Extras.
Instalação
Você pode instalar este módulo em qualquer distribuição baseada em RHEL, incluindo, mas não se limitando a:
- RedHat Enterprise Linux 7, 8, 9 e 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 e Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-cache-purge
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-cache-purge
Ative o módulo adicionando o seguinte no topo de /etc/nginx/nginx.conf:
load_module modules/ngx_http_cache_purge_module.so;
Este documento descreve nginx-module-cache-purge v2.5.10 lançado em 25 de março de 2026.
Purga seletivamente o conteúdo dos caches FastCGI, proxy, SCGI e uWSGI do NGINX usando requisições HTTP PURGE — sem truques de sistema de arquivos, sem dores de cabeça com permissões.
Este é um recurso presente no NGINX Plus, mas ngx_cache_purge o traz para o NGINX de código aberto.
Principais Recursos
- Purga na mesma localização — adicione suporte a
PURGEdiretamente nas localizações de cache existentes, sem necessidade de blocoslocationextras - Purga com curinga — purgue várias entradas de cache com uma única requisição usando
* - Purga em massa — limpe todo o conteúdo em cache de uma vez com
purge_all - Controle de acesso baseado em IP — restrinja quem pode emitir requisições de purga
- Substituição do método da chave de cache — purgue conteúdo em cache de GET mesmo quando
$request_methodestá na sua chave de cache - Formato de resposta configurável — obtenha resultados de purga em HTML, JSON, XML ou texto simples
- Todos os tipos de cache — funciona com FastCGI, proxy, SCGI e uWSGI
Início Rápido
Adicione suporte a PURGE a qualquer localização em cache:
http {
proxy_cache_path /var/cache/nginx keys_zone=my_cache:10m max_size=1g;
server {
location / {
proxy_pass http://127.0.0.1:8000;
proxy_cache my_cache;
proxy_cache_key "$scheme$host$request_uri";
proxy_cache_purge PURGE from 127.0.0.1;
}
}
}
Purge uma página em cache:
curl -X PURGE https://example.com/page-to-purge
É isso. Sem localização /purge separada, sem permissões de sistema de arquivos para gerenciar.
Diretrizes de Configuração
Sintaxe de Mesma Localização (Recomendado)
Habilita a purga diretamente na localização que serve conteúdo em cache.
fastcgi_cache_purge
- sintaxe:
fastcgi_cache_purge on|off|<method> [purge_all] [from all|<ip> [.. <ip>]] - padrão:
none - contexto:
http,server,location
proxy_cache_purge
- sintaxe:
proxy_cache_purge on|off|<method> [purge_all] [from all|<ip> [.. <ip>]] - padrão:
none - contexto:
http,server,location
scgi_cache_purge
- sintaxe:
scgi_cache_purge on|off|<method> [purge_all] [from all|<ip> [.. <ip>]] - padrão:
none - contexto:
http,server,location
uwsgi_cache_purge
- sintaxe:
uwsgi_cache_purge on|off|<method> [purge_all] [from all|<ip> [.. <ip>]] - padrão:
none - contexto:
http,server,location
Sintaxe de Localização Separada
Use uma localização dedicada para requisições de purga. Útil quando você precisa de diferentes regras de acesso para purgar.
fastcgi_cache_purge
- sintaxe:
fastcgi_cache_purge zone_name key - contexto:
location
proxy_cache_purge
- sintaxe:
proxy_cache_purge zone_name key - contexto:
location
scgi_cache_purge
- sintaxe:
scgi_cache_purge zone_name key - contexto:
location
uwsgi_cache_purge
- sintaxe:
uwsgi_cache_purge zone_name key - contexto:
location
Formato de Resposta
cache_purge_response_type
- sintaxe:
cache_purge_response_type html|json|xml|text - padrão:
html - contexto:
http,server,location
Exemplo com respostas JSON:
location / {
proxy_pass http://backend;
proxy_cache my_cache;
proxy_cache_key "$uri$is_args$args";
proxy_cache_purge PURGE from 127.0.0.1;
cache_purge_response_type json;
}
{"Key": "httplocalhost/"}
Substituição do Método da Chave de Cache
Quando $request_method é parte da sua chave de cache, requisições de purga geram uma chave diferente (PURGE vs GET) e não encontrarão a entrada em cache. Essas diretrizes resolvem isso:
*_cache_purge_key_method
- sintaxe:
fastcgi_cache_purge_key_method <method> [<method> ...] - contexto:
http,server,location
Disponível para todos os tipos de cache: fastcgi_cache_purge_key_method, proxy_cache_purge_key_method, scgi_cache_purge_key_method, uwsgi_cache_purge_key_method.
location ~ \.php$ {
fastcgi_cache WORDPRESS;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_purge PURGE from 127.0.0.1;
fastcgi_cache_purge_key_method GET; # Substitui GET por PURGE na busca da chave
}
Você pode especificar múltiplos métodos:
fastcgi_cache_purge_key_method GET HEAD;
Integração com WordPress
FastCGI Cache + Purga
Uma configuração completa do WordPress com suporte a cache e purga automática:
http {
fastcgi_cache_path /var/cache/nginx levels=1:2
keys_zone=WORDPRESS:100m max_size=1g
inactive=60m use_temp_path=off;
fastcgi_cache_key "$scheme$host$request_uri";
server {
listen 80;
server_name example.com;
root /var/www/wordpress;
index index.php;
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot|webp|avif)$ {
expires max;
log_not_found off;
}
location / {
try_files $uri $uri/ /index.php?$args;
fastcgi_cache_purge PURGE from 127.0.0.1;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_cache WORDPRESS;
fastcgi_cache_valid 200 60m;
fastcgi_cache_use_stale error timeout updating;
fastcgi_cache_lock on;
fastcgi_cache_purge PURGE from 127.0.0.1;
add_header X-Cache-Status $upstream_cache_status always;
}
}
}
Por que fastcgi_cache_purge em ambas as localizações? A URL raiz / é um caso especial. Quando try_files verifica $uri/, encontra o diretório raiz do documento. Para requisições GET, a diretiva index direciona para index.php — mas para requisições PURGE, index não se aplica e o NGINX para em location /. Adicionar fastcgi_cache_purge lá garante que PURGE / funcione.
Plugin de Purga de Cache Proxy
Instale o Proxy Cache Purge para purgar automaticamente o cache quando o conteúdo é atualizado:
wp plugin install varnish-http-purge --activate
wp option update vhp_varnish_ip '127.0.0.1'
O plugin envia requisições PURGE para o NGINX sempre que posts, comentários ou páginas são modificados — sem necessidade de gerenciamento manual de cache.
Melhores Práticas para Chaves de Cache
Mantenha simples — evite $request_method nas chaves
# Recomendado
fastcgi_cache_key "$scheme$host$request_uri";
# Evite — requisições de purga não corresponderão a entradas GET em cache
fastcgi_cache_key "$scheme$request_method$host$request_uri";
Se você precisar incluir $request_method, use *_cache_purge_key_method GET para corrigir as buscas de chave de purga.
Purga com Curiga
Purge múltiplas entradas que correspondem a um padrão anexando *:
curl -X PURGE https://example.com/blog/*
O asterisco deve ser o último caractere. Para que isso funcione, $uri deve estar no final da sua chave de cache.
Purga em Massa
Limpe todos os arquivos em cache de uma vez:
proxy_cache_purge PURGE purge_all from 127.0.0.1;
Isso pode ser lento com caches grandes ou armazenamento lento. Use caminhos de cache em RAM para melhor desempenho.
Controle de Acesso Baseado em IP
Restringa requisições de purga a fontes confiáveis:
fastcgi_cache_purge PURGE from 127.0.0.1 192.168.1.0/24;
Solução de Problemas
| Resposta | Causa | Correção |
|---|---|---|
| 405 Not Allowed | PURGE atingiu uma localização sem *_cache_purge |
Adicione *_cache_purge a todas as localizações relevantes |
| 412 Precondition Failed | Entrada de cache não encontrada (nunca em cache, já expirou ou incompatibilidade de chave) | Verifique a chave de cache — procure por problemas com $request_method |
| 403 Forbidden | IP do cliente não está na lista from |
Adicione seu IP à lista from |
| 200 OK mas o cache persiste | $request_method na chave de cache cria chaves incompatíveis |
Remova $request_method da chave ou adicione *_cache_purge_key_method GET |
interação com gzip_vary: Habilitar gzip_vary pode interferir na purga de cache. Se você experimentar um comportamento inconsistente de purga, desative gzip_vary dentro da localização em cache.
Testando
ngx_cache_purge inclui um conjunto de testes baseado em Test::Nginx:
prove
Veja Também
- Supercharging WordPress with NGINX Cache Purge — guia completo de configuração
- NGINX Proxy Cache & Microcaching — fundamentos do cache proxy
- Documentação do NGINX fastcgi_cache_purge — referência do NGINX Plus