Saltar a contenido

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

  1. Ve a Plugins → Agregar Nuevo
  2. Busca "Proxy Cache Purge" (slug: varnish-http-purge)
  3. 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:

  1. Ve a Ajustes → Proxy Cache Purge
  2. Establece "Set Custom IP" en: 127.0.0.1
  3. 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:

  1. Ve a Proxy Cache Purge → Ajustes
  2. En Cache Backend, selecciona NGINX
  3. 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/nginx como 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_bypass no se estén activando siempre.
PURGE devuelve 404
  • Asegúrate de que la directiva proxy_cache_purge esté 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_size en proxy_cache_path.
  • Reduce el tiempo de espera inactive.
  • Ejecuta nginx -s reload para activar la limpieza del administrador de caché.

Relacionado

  • Módulo cache-purge


    Referencia completa de directivas.

    Documentación

  • Módulo compression-normalize


    Reduce variantes de caché.

    Documentación

  • Guía de Caché FastCGI


    Método de caché alternativo para PHP-FPM.

    FastCGI Cache