Zum Inhalt

WordPress Cache-Purging auf VPS

Sofortige, automatische Cache-Invalidierung für WordPress auf jedem RHEL-basierten VPS oder dedizierten Server.


  • Automatische Invalidierung


    Der Cache wird automatisch gelöscht, wenn Sie Beiträge, Seiten oder Kommentare bearbeiten.

  • Chirurgische Präzision


    Nur die geänderte Seite wird gelöscht—Ihre gesamte Website bleibt im Cache und schnell.

  • 5-Minuten-Setup


    Einfache Konfiguration mit unseren vorgefertigten NGINX-Modulen.

  • Festplattencaching


    Der Cache überlebt NGINX-Neustarts—kein kalter Cache nach Updates.


Voraussetzungen

  • Ein VPS oder dedizierter Server, der RHEL 7/8/9, Rocky Linux, AlmaLinux oder Amazon Linux ausführt.
  • NGINX installiert (aus dem GetPageSpeed-Repository empfohlen).
  • WordPress-Website mit konfiguriertem Full-Page-Caching.

Schnelles Setup

Schritt 1: Installieren Sie das Cache-Purge-Modul

# Installieren Sie das GetPageSpeed-Repository
dnf -y install https://extras.getpagespeed.com/release-latest.rpm

# Installieren Sie das Cache-Purge-Modul
dnf -y install nginx-module-cache-purge

Aktivieren Sie das Modul in /etc/nginx/nginx.conf:

load_module modules/ngx_http_cache_purge_module.so;

Schritt 2: Konfigurieren Sie den NGINX-Proxy-Cache

Wenn Sie noch kein Proxy-Caching konfiguriert haben, hier ist eine vollständige Einrichtung:

Bearbeiten Sie /etc/nginx/nginx.conf oder erstellen Sie /etc/nginx/conf.d/proxy-cache.conf:

# Definieren Sie den Cache-Bereich (im http-Block)
proxy_cache_path /var/cache/nginx/wordpress
                 levels=1:2
                 keys_zone=wordpress:100m
                 max_size=10g
                 inactive=60m
                 use_temp_path=off;

In Ihrem Serverblock:

server {
    listen 80;
    server_name example.com;

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

    # Cache-Status-Header hinzufügen
    add_header X-Cache-Status $upstream_cache_status;

    # PURGE-Methode aktivieren (nur localhost)
    proxy_cache_purge PURGE from 127.0.0.1;

    location / {
        proxy_pass http://127.0.0.1:8080;  # Ihr 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;
    }
}

Erstellen Sie das Cache-Verzeichnis:

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

Schritt 3: Installieren Sie das Proxy-Cache-Purge-Plugin

  1. Gehen Sie zu Plugins → Neu hinzufügen
  2. Suchen Sie nach "Proxy Cache Purge" (Slug: varnish-http-purge)
  3. Klicken Sie auf Jetzt installieren, dann auf Aktivieren
wp plugin install varnish-http-purge --activate

Schritt 4: Konfigurieren Sie Proxy-Cache-Purge

Im WordPress-Admin:

  1. Gehen Sie zu Einstellungen → Proxy Cache Purge
  2. Setzen Sie "Set Custom IP" auf: 127.0.0.1
  3. Klicken Sie auf Einstellungen speichern

Kritische Einstellung

Das Plugin muss PURGE-Anfragen an 127.0.0.1 (localhost) senden, nicht an Ihre öffentliche IP.


Schritt 5: Konfigurieren Sie den NGINX-Cache-Backend

Ab Proxy Cache Purge 5.9.0 unterstützt das Plugin nativ das Wildcard-Purge-Format von NGINX. Konfigurieren Sie es, um das NGINX-Backend zu verwenden:

  1. Gehen Sie zu Proxy Cache Purge → Einstellungen
  2. Wählen Sie unter Cache-Backend NGINX
  3. Klicken Sie auf Einstellungen speichern

Fügen Sie zu Ihrer wp-config.php hinzu:

define( 'VHP_PURGE_BACKEND', 'nginx' );
Legacy: Plugin-Version < 5.9.0

Wenn Sie Proxy Cache Purge in einer Version älter als 5.9.0 ausführen, erstellen Sie wp-content/mu-plugins/nginx-cache-purge-fix.php:

<?php
/**
 * Plugin Name: NGINX Cache Purge Fix
 * Description: Fügt Wildcard zu Purge-URLs für Vary-Header-Kompatibilität hinzu
 */
add_filter("vhp_purgeme_path", function($purgeme, $schema, $host, $path, $pregex, $p) {
    if (empty($pregex)) {
        $purgeme .= "*";
    }
    return $purgeme;
}, 10, 6);

Testen Sie das Setup

# 1. Cachen Sie eine Seite
curl -sI http://127.0.0.1/sample-page/ -H 'Host: example.com' | grep X-Cache
# X-Cache-Status: MISS (erste Anfrage)
curl -sI http://127.0.0.1/sample-page/ -H 'Host: example.com' | grep X-Cache
# X-Cache-Status: HIT (im Cache!)

# 2. Löschen Sie die Seite
curl -sX PURGE 'http://127.0.0.1/sample-page/*' -H 'Host: example.com'
# <h1>Erfolgreiches Löschen</h1>

# 3. Überprüfen Sie, ob der Cache geleert wurde
curl -sI http://127.0.0.1/sample-page/ -H 'Host: example.com' | grep X-Cache
# X-Cache-Status: MISS (geleert!)

So funktioniert es

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

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

    subgraph NG["NGINX"]
        C["🗑️ cache_purge"] --> D["✅ Seite entfernt"]
    end

    E["👤 Besucher"] -->|"GET /post/"| NG
    D --> F["Frischer Inhalt bereitgestellt"]

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

Leistungstipps

  • Verwenden Sie RAM-Disk für heißen Cache


    Montieren Sie /var/cache/nginx als tmpfs für die schnellsten möglichen Cache-Lesevorgänge.

    mount -t tmpfs -o size=2G tmpfs /var/cache/nginx
    
  • Normalisieren Sie die Komprimierungsheader


    Reduzieren Sie Cache-Varianten mit dem compression-normalize Modul.

  • Cache für angemeldete Benutzer umgehen


    proxy_cache_bypass $cookie_wordpress_logged_in;
    

Sicherheitsüberlegungen

Die Einschränkung from 127.0.0.1 ist kritisch:

proxy_cache_purge PURGE from 127.0.0.1;

Ohne diese könnte jeder Ihren Cache löschen, indem er PURGE-Anfragen sendet.

Für zusätzliche Sicherheit können Sie auch:

# Nur PURGE von bestimmten IPs zulassen
proxy_cache_purge PURGE from 127.0.0.1 10.0.0.0/8;

# Oder Authentifizierung verlangen
# (nicht in diesem Leitfaden behandelt)

Fehlersuche

X-Cache-Status zeigt immer MISS
  • Überprüfen Sie, ob die proxy_cache-Direktive aktiviert ist.
  • Stellen Sie sicher, dass das Cache-Verzeichnis existiert und von nginx beschreibbar ist.
  • Überprüfen Sie, ob die Regeln für proxy_cache_bypass nicht immer ausgelöst werden.
PURGE gibt 404 zurück
  • Stellen Sie sicher, dass die proxy_cache_purge-Direktive im richtigen Standortblock ist.
  • Überprüfen Sie, ob das Modul geladen ist: nginx -V 2>&1 | grep cache_purge
Cache-Verzeichnis füllt sich
  • Passen Sie max_size in proxy_cache_path an.
  • Reduzieren Sie die inactive-Timeout.
  • Führen Sie nginx -s reload aus, um die Cache-Manager-Bereinigung auszulösen.

Verwandt

  • cache-purge Modul


    Vollständige Direktive-Referenz

    Dokumentation

  • compression-normalize Modul


    Reduzieren Sie Cache-Varianten

    Dokumentation

  • FastCGI Cache-Leitfaden


    Alternative Caching-Methode für PHP-FPM

    FastCGI Cache