cache-purge: módulo de purga de caché e invalidación de etiquetas para NGINX
Requiere el plan Pro (o superior) de la suscripción GetPageSpeed NGINX Extras.
Instalación
Puede instalar este módulo en cualquier distribución basada en RHEL, incluyendo, pero sin limitarse a:
- RedHat Enterprise Linux 7, 8, 9 y 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 y 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
Habilite el módulo añadiendo lo siguiente al inicio de /etc/nginx/nginx.conf:
load_module modules/ngx_http_cache_purge_module.so;
Este documento describe nginx-module-cache-purge v2.6.0 publicado el 23 de agosto de 2026.
Purga selectiva de contenido de las cachés FastCGI, proxy, SCGI y uWSGI de NGINX mediante solicitudes HTTP PURGE — sin trucos con el sistema de archivos, sin dolores de cabeza con permisos.
Esta es una funcionalidad presente en NGINX Plus, pero ngx_cache_purge la trae a NGINX de código abierto.
Características principales
- Purga en la misma ubicación — añada soporte
PURGEdirectamente a las ubicaciones de caché existentes, sin necesidad de bloqueslocationadicionales - Purga con comodines — purgue múltiples entradas de caché con una sola solicitud usando
* - Etiquetas de caché / claves sustitutas — invalide solo los objetos cuyas etiquetas de respuesta en caché coincidan con un patrón PURGE de confianza
- Purga masiva — borre todo el contenido en caché de una vez con
purge_all - Control de acceso basado en IP — restrinja quién puede emitir solicitudes de purga
- Sustitución del método de clave de caché — purgue contenido almacenado en caché con GET incluso cuando
$request_methodestá en su clave de caché - Formato de respuesta configurable — obtenga resultados de purga en HTML, JSON, XML o texto plano
- Todos los tipos de caché — funciona con FastCGI, proxy, SCGI y uWSGI
Inicio rápido
Añada soporte PURGE a cualquier ubicación en caché:
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;
}
}
}
Purgue una página en caché:
curl -X PURGE https://example.com/page-to-purge
Eso es todo. Sin ubicación /purge separada, sin permisos del sistema de archivos que gestionar.
Directivas de configuración
Sintaxis de misma ubicación (recomendada)
Habilita la purga directamente en la ubicación que sirve contenido en caché.
fastcgi_cache_purge
- sintaxis:
fastcgi_cache_purge on|off|<method> [purge_all] [from all|<ip> [.. <ip>]] - predeterminado:
none - contexto:
http,server,location
proxy_cache_purge
- sintaxis:
proxy_cache_purge on|off|<method> [purge_all] [from all|<ip> [.. <ip>]] - predeterminado:
none - contexto:
http,server,location
scgi_cache_purge
- sintaxis:
scgi_cache_purge on|off|<method> [purge_all] [from all|<ip> [.. <ip>]] - predeterminado:
none - contexto:
http,server,location
uwsgi_cache_purge
- sintaxis:
uwsgi_cache_purge on|off|<method> [purge_all] [from all|<ip> [.. <ip>]] - predeterminado:
none - contexto:
http,server,location
Sintaxis de ubicación separada
Use una ubicación dedicada para solicitudes de purga. Útil cuando necesita reglas de acceso diferentes para la purga.
fastcgi_cache_purge
- sintaxis:
fastcgi_cache_purge zone_name key - contexto:
location
proxy_cache_purge
- sintaxis:
proxy_cache_purge zone_name key - contexto:
location
scgi_cache_purge
- sintaxis:
scgi_cache_purge zone_name key - contexto:
location
uwsgi_cache_purge
- sintaxis:
uwsgi_cache_purge zone_name key - contexto:
location
Formato de respuesta
cache_purge_response_type
- sintaxis:
cache_purge_response_type html|json|xml|text - predeterminado:
html - contexto:
http,server,location
Ejemplo con respuestas 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/"}
Sustitución del método de clave de caché
Cuando $request_method es parte de su clave de caché, las solicitudes de purga generan una clave diferente (PURGE vs GET) y no encontrarán la entrada en caché. Estas directivas resuelven ese problema:
*_cache_purge_key_method
- sintaxis:
fastcgi_cache_purge_key_method <method> [<method> ...] - contexto:
http,server,location
Disponible para todos los tipos de caché: 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; # Sustituye GET por PURGE en la búsqueda de clave
}
Puede especificar múltiples métodos:
fastcgi_cache_purge_key_method GET HEAD;
Integración con WordPress
Caché FastCGI + Purga
Una configuración completa de WordPress con caché y soporte de 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 qué fastcgi_cache_purge en ambas ubicaciones? La URL raíz / es un caso especial. Cuando try_files verifica $uri/, encuentra el directorio raíz del documento. Para solicitudes GET, la directiva index enruta a index.php — pero para solicitudes PURGE, index no se aplica y NGINX se detiene en location /. Añadir fastcgi_cache_purge allí garantiza que PURGE / funcione.
Plugin de purga de caché proxy
Instale el plugin Proxy Cache Purge para purgar automáticamente la caché cuando se actualice el contenido:
wp plugin install varnish-http-purge --activate
wp option update vhp_varnish_ip '127.0.0.1'
El plugin envía solicitudes PURGE a NGINX cada vez que se modifican publicaciones, comentarios o páginas — sin necesidad de gestión manual de caché.
Mejores prácticas para claves de caché
Manténgalo simple — evite $request_method en las claves
## Recomendado
fastcgi_cache_key "$scheme$host$request_uri";
## Evitar — las solicitudes de purga no coincidirán con las entradas GET en caché
fastcgi_cache_key "$scheme$request_method$host$request_uri";
Si debe incluir $request_method, use *_cache_purge_key_method GET para corregir las búsquedas de clave de purga.
Purga con comodines
Purgue múltiples entradas que coincidan con un patrón añadiendo *:
curl -X PURGE https://example.com/blog/*
El asterisco debe ser el último carácter. Para que esto funcione, $uri debe estar al final de su clave de caché.
Etiquetas de caché / claves sustitutas
cache_purge_tags conecta una cabecera de etiqueta almacenada en las respuestas de upstream en caché con una cabecera regex en una solicitud PURGE autorizada:
location / {
proxy_pass http://backend;
proxy_cache app_cache;
proxy_cache_key "$scheme$host$request_uri";
proxy_cache_purge PURGE from 127.0.0.1;
cache_purge_tags X-Magento-Tags X-Magento-Tags-Pattern;
}
- sintaxis:
cache_purge_tags <cached-response-header> <purge-pattern-header> - predeterminado:
off - contexto:
http,server,location
Para Magento Open Source y Adobe Commerce, no se necesita ningún cambio en la aplicación.
Magento ya añade X-Magento-Tags a las respuestas almacenables en caché y envía solicitudes PURGE de localhost de confianza con X-Magento-Tags-Pattern. El módulo escanea la misma zona de caché y elimina solo los objetos coincidentes. Un patrón de etiqueta tiene prioridad sobre el comportamiento de clave exacta, comodín y purge_all para esa solicitud.
La cabecera de etiqueta de respuesta puede ocultarse a los clientes con proxy_hide_header.
Permanece disponible en los metadatos de caché en disco de NGINX para invalidación. Una regex inválida devuelve HTTP 400; un patrón válido sin coincidencias devuelve HTTP 200, coincidiendo con el VCL de Varnish generado por Magento.
La invalidación por etiquetas escanea los metadatos de cabecera en caché solo cuando llega una solicitud PURGE. Los aciertos de caché normales no pagan sobrecarga de índice de etiquetas, pero el tiempo de purga crece con el número de archivos en la zona de caché. Esto intercambia la lista de baneo persistente de Varnish por la eliminación inmediata de objetos NGINX coincidentes.
Las integraciones de etiquetas de caché de WordPress pueden usar la misma directiva con sus nombres de cabecera:
cache_purge_tags X-Cache-Tags X-Cache-Tags-Pattern;
Purga masiva
Borre todos los archivos en caché de una vez:
proxy_cache_purge PURGE purge_all from 127.0.0.1;
Esto puede ser lento con cachés grandes o almacenamiento lento. Use rutas de caché respaldadas por RAM para un mejor rendimiento.
Control de acceso basado en IP
Restrinja las solicitudes de purga a fuentes de confianza:
fastcgi_cache_purge PURGE from 127.0.0.1 192.168.1.0/24;
Solución de problemas
| Respuesta | Causa | Solución |
|---|---|---|
| 405 Not Allowed | PURGE alcanzó una ubicación sin *_cache_purge |
Añada *_cache_purge a todas las ubicaciones relevantes |
| 412 Precondition Failed | Entrada de caché no encontrada (nunca almacenada, ya expirada o clave no coincide) | Verifique la clave de caché — busque problemas con $request_method |
| 403 Forbidden | IP del cliente no está en la lista from |
Añada su IP a from |
| 200 OK pero la caché persiste | $request_method en la clave de caché crea claves no coincidentes |
Elimine $request_method de la clave, o añada *_cache_purge_key_method GET |
Interacción con gzip_vary: Habilitar gzip_vary puede interferir con la purga de caché. Si experimenta un comportamiento de purga inconsistente, deshabilite gzip_vary dentro de la ubicación en caché.
Pruebas
ngx_cache_purge incluye un conjunto de pruebas basado en Test::Nginx:
prove
Véase también
- Supercharging WordPress with NGINX Cache Purge — guía de configuración completa
- NGINX Proxy Cache & Microcaching — fundamentos de caché proxy
- Documentación de NGINX fastcgi_cache_purge — referencia de NGINX Plus