:::: MENU ::::

WebDevExp

Meine Erfahrungen in der Webentwicklerwelt

WP Super Cache + Nginx + mod_rewrite-Caching

Webserver, Wordpress

WP Super Cache + Nginx + mod_rewrite-Caching

WP Super Cache ist ein klasse Caching Plugin für WordPress, welches drei verschiedene Caching-Arten unterstützt.

  • Legacy Page-Caching
    Ist die langsamste Art, hier werden lediglich Daten, keine kompletten Seiten im Cache abgelegt
  • PHP um Cache-Dateien auszuliefern
    Hier werden statische HTML Seiten generiert, aber PHP liefert diese weiterhin aus, ist schon ziemlich gut, aber es geht noch schneller
  • mod_rewrite Caching
    Ist eigentlich für den (langsamen) Apache vorgesehen, aber mit der entsprechenden Config geht es auch mit dem flotten NGINX

Beim mod_rewrite-Caching würde eine .htaccess-Datei dafür sorgen, dass der Webserver zuerst versucht die statische HTLM Datei auszuliefern, welche in wp-content/cache/supercache/[domain]/[pfad] abgelegt wird. Kommt nun ein Request, wird Apache zuerst dort nach einer Datei suchen, ist sie vorhanden, kann diese ausgeliefert werden, ohne dass PHP überhaupt anspringen muss.

Damit diese Technik nun auch mit NGINX Funktioniert, muss man die Config folgendermaßen anpassen:

server {
        ...
        set $cache_uri $request_uri;

        #kein Cache nach POST Requests
        if ($request_method = POST) { 
                set $cache_uri 'null cache';
        }
        #kein Cache für URLs mit QueryString (get-Parameter)
        if ($query_string != "") { 
                set $cache_uri 'null cache';
        }
        #kein Cache für den Admin-Bereich, Ajax-Requests, CronJobs und diverse weitere
        if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") {
                set $cache_uri 'null cache';
        }
        #eingeloggte User oder Besucher, die gerade einen Kommentar angegeben haben, sollen ebenfalls keine statische Seite sehen
        if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_logged_in") {
                set $cache_uri 'null cache';
        }
        #try_files kennen wir ja schon, wird nun um den Versuch, die statische Version auszuliefern, erweitert
        location / {
                try_files /wp-content/cache/supercache/$http_host/$cache_uri/index.html $uri $uri/ /index.php?$args;
        }
        ...
}

Das Ganze führt zu Antwortzeiten von unter 100ms, was auch Google mag

Leave a comment

Loading Facebook Comments ...