High-performance WordPress mit WP-FFPC, memcached, nginx und ISPConfig
WP-FFPC (WordPress Fast Full Page Cache) ist ein Full Page Cache für WordPress, das direkt im Arbeitsspeicher cacht (z.B. mit APCu oder memcached). Da nginx mithilfe des integrierten memcached-Plugins direkt von memcached lesen und somit den kompletten PHP-/MySQL-Stack umgehen kann, lassen sich so äußerst geringe Ladezeiten erreichen, die sehr nahe am Optimum liegen.
WP-FFPC lässt sich ganz normal über den in WordPress integrierten Plugin-Manager installieren:
Nach erfolgter Installation muss das Plugin noch aktiviert werden; danach findet man die WP-FFPC-Einstellungen unter Einstellungen > WP-FFPC. Die Standard-Einstellungen sollten in den meisten Fällen passen. Achten sollte man darauf, dass als Backend entweder PHP Memcached oder PHP Memcache ausgewählt ist, je nachdem, welches memcached-Modul in PHP zur Verfügung steht (bei den von Timme Hosting verwendeten PHP-Versionen stehen ausnahmslos beide Module, also PHP Memcached und PHP Memcache, zur Verfügung, daher kann man sich bedenkenlos für eine der beiden Varianten entscheiden).
Hier finden Sie mehr Informationen zu PHP Memcached und PHP Memcache:
Wenn WP-FFPC sich mit memcached verbinden kann, erscheint unter Backend status die Nachricht up & running:
Auf dem Reiter nginx finden Sie eine Beispielkonfiguration für nginx:
Da wir ISPConfig als Control Panel nutzen, benötigen wir nur den folgenden, leicht abgewandelten Teil - diese Konfiguration sorgt dafür, dass die meisten Anfragen aus dem Cache (memcached) bedient werden, es aber einige Ausnahmen gibt, so z.B. für POST-Requests oder GET-Requests mit Argumenten, falls der angefragte Pfad mit /wp- beginnt oder wenn bestimmte Cookies gesetzt sind (wie es z.B. für eingeloggte User der Fall ist).
Die Zeile
memcached_pass 127.0.0.1:11211;
sorgt schlussendlich dafür, dass der Request, wenn er es bis hierhin geschafft hat, vom memcached bedient wird, wodurch die Seite extrem schnell lädt, da der komplette PHP-/MySQL-Stack umgangen wird:
client_max_body_size 100M; # Add trailing slash to */wp-admin requests. rewrite /wp-admin$ $scheme://$host$uri/ permanent; location ~* \.(jpg|jpeg|png|gif|css|js|ico)$ { expires max; log_not_found off; } location / { try_files $uri $uri/ @memcached; } # try to get result from memcached location @memcached { default_type text/html; set $memcached_key data-$scheme://$host$request_uri; set $memcached_request 1; # exceptions # avoid cache serve of POST requests if ($request_method = POST ) { set $memcached_request 0; } # avoid cache serve of wp-admin-like pages, starting with "wp-" if ( $uri ~ "/wp-" ) { set $memcached_request 0; } # avoid cache serve of any URL with query strings if ( $args ) { set $memcached_request 0; } if ($http_cookie ~* "comment_author_|wordpressuser_|wp-postpass_|wordpress_logged_in_" ) { set $memcached_request 0; } if ( $memcached_request = 1) { memcached_pass 127.0.0.1:11211; error_page 404 = @rewrites; } if ( $memcached_request = 0) { rewrite ^ /index.php last; } } ## rewrite rules location @rewrites { add_header X-Cache-Engine ""; rewrite ^ /index.php last; }
Diese Konfiguration fügen wir einfach in das Feld nginx Direktiven in ISPConfig ein (auf dem Reiter Optionen bei den Website-Einstellungen der betroffenen Website) und klicken auf Speichern:
Zum Schluss muss nun noch die Zeile
define('WP_CACHE',true);
in der wp-config.php eingetragen werden, z.B. gleich am Anfang:
<?php /** * In dieser Datei werden die Grundeinstellungen für WordPress vorgenommen. * * Zu diesen Einstellungen gehören: MySQL-Zugangsdaten, Tabellenpräfix, * Secret-Keys, Sprache und ABSPATH. Mehr Informationen zur wp-config.php gibt es * auf der {@link http://codex.wordpress.org/Editing_wp-config.php wp-config.php editieren} * Seite im Codex. Die Informationen für die MySQL-Datenbank bekommst du von deinem Webhoster. * * Diese Datei wird von der wp-config.php-Erzeugungsroutine verwendet. Sie wird ausgeführt, * wenn noch keine wp-config.php (aber eine wp-config-sample.php) vorhanden ist, * und die Installationsroutine (/wp-admin/install.php) aufgerufen wird. * Man kann aber auch direkt in dieser Datei alle Eingaben vornehmen und sie von * wp-config-sample.php in wp-config.php umbenennen und die Installation starten. * * @package WordPress */ define('WP_CACHE',true); [...]