Purga de Caché de WordPress en VPS
Invalidación de caché instantánea y automática para WordPress en cualquier VPS o servidor dedicado basado en RHEL.
-
Invalidación Automática
La caché se purga automáticamente cuando editas publicaciones, páginas o comentarios.
-
Precisión Quirúrgica
Solo se purga la página cambiada; tu sitio completo permanece en caché y rápido.
-
Configuración en 5 Minutos
Configuración simple con nuestros módulos NGINX preconstruidos.
-
Caché Basada en Disco
La caché sobrevive a los reinicios de NGINX; no hay caché fría después de las actualizaciones.
Requisitos Previos
- Un VPS o servidor dedicado que ejecute RHEL 7/8/9, Rocky Linux, AlmaLinux o Amazon Linux.
- NGINX instalado (se recomienda desde el repositorio de GetPageSpeed).
- Sitio de WordPress con caché de página completa configurada.
Configuración Rápida
Paso 1: Instalar el Módulo de Purga de Caché
# Instalar el repositorio de GetPageSpeed
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
# Instalar el módulo de purga de caché
dnf -y install nginx-module-cache-purge
Habilita el módulo en /etc/nginx/nginx.conf:
load_module modules/ngx_http_cache_purge_module.so;
Paso 2: Configurar la Caché Proxy de NGINX
Si aún no tienes configurada la caché proxy, aquí tienes una configuración completa:
Edita /etc/nginx/nginx.conf o crea /etc/nginx/conf.d/proxy-cache.conf:
# Definir zona de caché (en el bloque http)
proxy_cache_path /var/cache/nginx/wordpress
levels=1:2
keys_zone=wordpress:100m
max_size=10g
inactive=60m
use_temp_path=off;
En tu bloque de servidor:
server {
listen 80;
server_name example.com;
# Habilitar caché
proxy_cache wordpress;
proxy_cache_valid 200 60m;
proxy_cache_valid 404 1m;
proxy_cache_key "$scheme$request_method$host$request_uri";
# Agregar encabezado de estado de caché
add_header X-Cache-Status $upstream_cache_status;
# Habilitar método PURGE (solo localhost)
proxy_cache_purge PURGE from 127.0.0.1;
location / {
proxy_pass http://127.0.0.1:8080; # Tu 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;
}
}
Crea el directorio de caché:
mkdir -p /var/cache/nginx/wordpress
chown nginx:nginx /var/cache/nginx/wordpress
nginx -t && systemctl reload nginx
Paso 3: Instalar el Plugin de Purga de Caché Proxy
- Ve a Plugins → Agregar Nuevo
- Busca "Proxy Cache Purge" (slug:
varnish-http-purge) - Haz clic en Instalar Ahora, luego Activar
wp plugin install varnish-http-purge --activate
Paso 4: Configurar la Purga de Caché Proxy
En la administración de WordPress:
- Ve a Ajustes → Proxy Cache Purge
- Establece "Set Custom IP" en:
127.0.0.1 - Haz clic en Guardar Ajustes
Configuración Crítica
El plugin debe enviar solicitudes PURGE a 127.0.0.1 (localhost), no a tu IP pública.
Paso 5: Configurar el Backend de Caché de NGINX
A partir de Proxy Cache Purge 5.9.0, el plugin admite nativamente el formato de purga con comodín de NGINX. Configúralo para usar el backend de NGINX:
- Ve a Proxy Cache Purge → Ajustes
- En Cache Backend, selecciona NGINX
- Haz clic en Guardar Ajustes
Agrega a tu wp-config.php:
define( 'VHP_PURGE_BACKEND', 'nginx' );
Legado: Versión del plugin < 5.9.0
Si estás ejecutando Proxy Cache Purge anterior a 5.9.0, crea
wp-content/mu-plugins/nginx-cache-purge-fix.php:
<?php
/**
* Nombre del Plugin: NGINX Cache Purge Fix
* Descripción: Agrega comodín a las URLs de purga para compatibilidad con el encabezado Vary
*/
add_filter("vhp_purgeme_path", function($purgeme, $schema, $host, $path, $pregex, $p) {
if (empty($pregex)) {
$purgeme .= "*";
}
return $purgeme;
}, 10, 6);
Prueba la Configuración
# 1. Caché una página
curl -sI http://127.0.0.1/sample-page/ -H 'Host: example.com' | grep X-Cache
# X-Cache-Status: MISS (primer request)
curl -sI http://127.0.0.1/sample-page/ -H 'Host: example.com' | grep X-Cache
# X-Cache-Status: HIT (¡en caché!)
# 2. Purga la página
curl -sX PURGE 'http://127.0.0.1/sample-page/*' -H 'Host: example.com'
# <h1>Purga exitosa</h1>
# 3. Verifica que la caché se haya limpiado
curl -sI http://127.0.0.1/sample-page/ -H 'Host: example.com' | grep X-Cache
# X-Cache-Status: MISS (¡limpiada!)
Cómo Funciona
flowchart LR
subgraph WP["WordPress"]
A["📝 Publicación Actualizada"] --> B["🔌 Plugin"]
end
B -->|"PURGE /post/*"| C
subgraph NG["NGINX"]
C["🗑️ cache_purge"] --> D["✅ Página eliminada"]
end
E["👤 Visitante"] -->|"GET /post/"| NG
D --> F["Contenido fresco servido"]
style WP fill:#4a90d9,stroke:#2d5986,color:#fff
style NG fill:#009639,stroke:#006325,color:#fff
Consejos de Rendimiento
-
Usa Disco RAM para Caché Caliente
Monta
/var/cache/nginxcomo tmpfs para lecturas de caché lo más rápidas posible.mount -t tmpfs -o size=2G tmpfs /var/cache/nginx -
Normaliza los Encabezados de Compresión
Reduce las variantes de caché con el módulo compression-normalize.
-
Evita la Caché para Usuarios Conectados
proxy_cache_bypass $cookie_wordpress_logged_in;
Consideraciones de Seguridad
La restricción from 127.0.0.1 es crítica:
proxy_cache_purge PURGE from 127.0.0.1;
Sin ella, cualquiera podría purgar tu caché enviando solicitudes PURGE.
Para mayor seguridad, también puedes:
# Solo permitir PURGE desde IPs específicas
proxy_cache_purge PURGE from 127.0.0.1 10.0.0.0/8;
# O requerir autenticación
# (no cubierto en esta guía)
Solución de Problemas
X-Cache-Status siempre muestra MISS
- Verifica que la directiva proxy_cache esté habilitada.
- Asegúrate de que el directorio de caché exista y sea escribible por nginx.
- Verifica que las reglas de
proxy_cache_bypassno se estén activando siempre.
PURGE devuelve 404
- Asegúrate de que la directiva
proxy_cache_purgeesté en el bloque de ubicación correcto. - Verifica que el módulo esté cargado:
nginx -V 2>&1 | grep cache_purge.
El directorio de caché se está llenando
- Ajusta
max_sizeenproxy_cache_path. - Reduce el tiempo de espera
inactive. - Ejecuta
nginx -s reloadpara activar la limpieza del administrador de caché.
Relacionado
-
Módulo cache-purge
Referencia completa de directivas.
-
Módulo compression-normalize
Reduce variantes de caché.
-
Guía de Caché FastCGI
Método de caché alternativo para PHP-FPM.