FastCGI Cache Bereinigung für PHP-FPM
Ultraschnelles Caching für WordPress mit automatischer, gezielter Cache-Invalidierung.
-
Kein Proxy erforderlich
FastCGI-Cache kommuniziert direkt mit PHP-FPM – kein Overhead durch einen Reverse-Proxy
-
Mikrosekunden-Antwort
Aus dem Cache bereitgestellte Seiten direkt aus dem Speicher oder SSD durch NGINX
-
Selektive Bereinigung
Nur geänderte Seiten werden bereinigt, der Rest des Caches bleibt aktiv
-
Integrierte Sicherheit
Umgeht den Cache für angemeldete Benutzer, Administratoren und WooCommerce-Warenkörbe
Wann FastCGI vs Proxy-Cache verwenden
| Funktion | FastCGI-Cache | Proxy-Cache |
|---|---|---|
| Backend | PHP-FPM (direkt) | Jeder HTTP-Backend |
| Latenz | Niedriger (kein Proxy-Hops) | Etwas höher |
| Anwendungsfall | WordPress, PHP-Apps | Node.js, Python usw. |
| Konfigurationskomplexität | Einfacher | Flexibler |
Verwenden Sie FastCGI-Cache, wenn Sie WordPress oder PHP direkt auf NGINX ohne eine Reverse-Proxy-Schicht ausführen.
Schnelle Einrichtung
Schritt 1: Erforderliche Module installieren
# GetPageSpeed-Repository installieren
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
# Cache-Bereinigungsmodul installieren
dnf -y install nginx-module-cache-purge
Aktivieren Sie in /etc/nginx/nginx.conf:
load_module modules/ngx_http_cache_purge_module.so;
Schritt 2: FastCGI-Cache konfigurieren
Fügen Sie zu Ihrem http-Block in /etc/nginx/nginx.conf hinzu:
# FastCGI-Cache-Zonen-Definition
fastcgi_cache_path /var/cache/nginx/fastcgi
levels=1:2
keys_zone=WORDPRESS:100m
max_size=10g
inactive=60m
use_temp_path=off;
# Cache-Schlüssel (was jede gecachte Seite einzigartig macht)
fastcgi_cache_key "$scheme$request_method$host$request_uri";
Schritt 3: Serverblock konfigurieren
Erstellen oder aktualisieren Sie Ihren WordPress-Serverblock:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.php;
# Cache-Einstellungen
set $skip_cache 0;
# POST-Anfragen nicht cachen
if ($request_method = POST) {
set $skip_cache 1;
}
# URLs mit Abfragezeichenfolgen nicht cachen
if ($query_string != "") {
set $skip_cache 1;
}
# WordPress-Admin, Login oder spezifische Pfade nicht cachen
if ($request_uri ~* "/wp-admin/|/wp-login.php|/xmlrpc.php|/wp-cron.php") {
set $skip_cache 1;
}
# Für angemeldete Benutzer oder kürzlich kommentierende Benutzer nicht cachen
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_logged_in") {
set $skip_cache 1;
}
# WooCommerce-Seiten nicht cachen
if ($request_uri ~* "/cart/|/checkout/|/my-account/") {
set $skip_cache 1;
}
if ($http_cookie ~* "woocommerce_cart_hash|woocommerce_items_in_cart") {
set $skip_cache 1;
}
# Cache-Status-Header
add_header X-Cache-Status $upstream_cache_status;
# PURGE-Methode aktivieren
fastcgi_cache_purge PURGE from 127.0.0.1;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
# FastCGI-Caching
fastcgi_cache WORDPRESS;
fastcgi_cache_valid 200 60m;
fastcgi_cache_valid 404 1m;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
# Wichtig für dynamische Inhalte
fastcgi_cache_use_stale error timeout invalid_header http_500 http_503;
fastcgi_cache_lock on;
}
# Statische Dateien - keine Caching-Konfiguration erforderlich
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
}
Erstellen Sie das Cache-Verzeichnis und laden Sie neu:
mkdir -p /var/cache/nginx/fastcgi
chown nginx:nginx /var/cache/nginx/fastcgi
nginx -t && systemctl reload nginx
Schritt 4: WordPress-Plugin installieren
- Gehen Sie zu Plugins → Neu hinzufügen
- Suchen Sie nach "Proxy Cache Purge"
- Installieren und aktivieren
wp plugin install varnish-http-purge --activate
Konfigurieren Sie das Plugin:
- Gehen Sie zu Einstellungen → Proxy Cache Purge
- Setzen Sie Benutzerdefinierte IP auf
127.0.0.1 - Speichern
Schritt 5: NGINX-Cache-Backend konfigurieren
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:
- Gehen Sie zu Proxy Cache Purge → Einstellungen
- Wählen Sie unter Cache-Backend NGINX
- 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 verwenden, das älter als 5.9.0 ist, erstellen Sie
wp-content/mu-plugins/nginx-cache-purge-fix.php:
<?php
/**
* Plugin Name: NGINX FastCGI Cache Purge Fix
* Description: Fügt Wildcard hinzu, um alle Cache-Varianten zu bereinigen
*/
add_filter("vhp_purgeme_path", function($purgeme, $schema, $host, $path, $pregex, $p) {
if (empty($pregex)) {
$purgeme .= "*";
}
return $purgeme;
}, 10, 6);
Testen
# Erste Anfrage - sollte MISS sein
curl -sI http://127.0.0.1/ -H 'Host: example.com' | grep X-Cache
# X-Cache-Status: MISS
# Zweite Anfrage - sollte HIT sein
curl -sI http://127.0.0.1/ -H 'Host: example.com' | grep X-Cache
# X-Cache-Status: HIT
# Cache bereinigen
curl -sX PURGE 'http://127.0.0.1/*' -H 'Host: example.com'
# Überprüfen, ob bereinigt wurde
curl -sI http://127.0.0.1/ -H 'Host: example.com' | grep X-Cache
# X-Cache-Status: MISS
So funktioniert es
flowchart LR
A["👤 Besucher"] -->|"GET /post/"| B["NGINX"]
B -->|"Cache HIT"| C["⚡ Sofortige Antwort"]
B -->|"Cache MISS"| D["PHP-FPM"]
D --> E["WordPress"]
E --> D
D -->|"Im Cache speichern"| B
B --> C
style A fill:#667eea
style B fill:#009639,color:#fff
style C fill:#48bb78,color:#fff
style D fill:#4a90d9,color:#fff
style E fill:#4a90d9,color:#fff
Leistungsvergleich
| Metrik | Kein Cache | FastCGI-Cache |
|---|---|---|
| Antwortzeit | 200-500ms | 5-20ms |
| Anfragen/Sekunde | 50-100 | 5.000+ |
| CPU-Nutzung | Hoch | Minimal |
| Speicher | Hoch (PHP) | Niedrig (NGINX) |
Auswirkungen in der Praxis
FastCGI-Cache verbessert typischerweise die Antwortzeiten von WordPress um 10-50x und kann Verkehrsspitzen problemlos bewältigen.
Erweiterte Konfiguration
Unterschiedliche Cache-Dauern nach Inhaltstyp
# Seiten für 60 Minuten cachen
fastcgi_cache_valid 200 60m;
# Weiterleitungen für 10 Minuten cachen
fastcgi_cache_valid 301 302 10m;
# Fehler nicht lange cachen
fastcgi_cache_valid 404 1m;
fastcgi_cache_valid 500 502 503 504 0;
Veraltete Inhalte während von Fehlern bereitstellen
fastcgi_cache_use_stale error timeout invalid_header
updating http_500 http_502 http_503 http_504;
Cache-Sperre zur Verhinderung von Stampeden
fastcgi_cache_lock on;
fastcgi_cache_lock_timeout 5s;
Wenn mehrere Anfragen gleichzeitig auf eine nicht gecachte Seite zugreifen, geht nur eine Anfrage zu PHP-FPM. Die anderen warten, bis der Cache gefüllt ist.
Fehlersuche
Seiten werden nicht gecacht
Überprüfen Sie die $skip_cache-Variable. Häufige Probleme:
- Abfragezeichenfolgen auf allen URLs (einige Plugins fügen
?ver=zu Seiten hinzu) - Cookies werden auf allen Seiten gesetzt
- Überprüfen:
curl -sI your-url | grep Set-Cookie
Angemeldete Seiten werden gecacht
Überprüfen Sie, ob die Cookie-Prüfung Ihre Auth-Cookies umfasst:
if ($http_cookie ~* "wordpress_logged_in") {
set $skip_cache 1;
}
Cache wird nicht bereinigt
- Überprüfen Sie die Plugin-Einstellung: Benutzerdefinierte IP =
127.0.0.1 - Stellen Sie sicher, dass das Cache-Backend auf NGINX eingestellt ist (oder
VHP_PURGE_BACKENDinwp-config.phpdefiniert ist) - Testen Sie manuell:
curl -X PURGE 'http://127.0.0.1/page/*'
Verwandt
-
Proxy Cache Anleitung
Alternative für Nicht-PHP-Backends
-
cache-purge Modul
Vollständige Direktivenreferenz
-
PageSpeed Modul
Zusätzliche Optimierungsschicht