Mit dem WordPress-Plugin Cachify steht eine Lösung zur Verfügung, die ein einfaches Zwischenspeichern von dynamisch erzeugten Webseiten bietet. Die Inhalte können mit unterschiedlichen Methoden zwischengespeichert werden. Unterstützt werden APC, Disk, DB und Memcached (nur mit Nginx). Da ich hier Nginx einsetze, bietet sich Memcached als schnellste Variante an. Wie Cachify und Nginx dann zu konfigurieren sind kann im Cachify-Wiki nachgelesen werden.
Die erfolgreiche Konfiguration läßt sich einfach überprüfen: es wird an das Ende der jeweiligen Webseite ein HTML-Kommentar von Cachify eingefügt. Ist dieser im Quelltext der Seite vohanden, dann wurde die Seite aus dem Cache, bei mir also von Nginx/Memcached ausgeliefert.
<!-- Cachify | http://cachify.de Memcached @ 08.07.2016 13:25:07 -->
Nach ein paar Tests stellte sich heraus, dass genau eine Seite hier aus dem Blog nicht zwischengespeichert wird. Nach langem Suchen fand ich dann den Grund: der Seitenquelltext ist größer als 1 MB (bedingt durch sehr viele Kommentare auf der Seite) und Memcached speichert in der Standardkonfiguration nur Items bis zu einer Größe von 1 MB.
Ab der Version 1.4.2 von Memcached kann diese Größe konfiguriert werden. Unter Debian 8 fügt man dazu in die Datei /etc/memcached.conf eine neue Zeile mit z.B.
-I 2m
ein. Damit wird die Maximalgröße eines Items auf 2 MB angehoben. Anschließend muss Memcached neu gestartet werden. Mit folgendem Kommando lassen sich die aktuellen Einstellungen eines laufenden Memcached anzeigen:
# echo "stats settings" | netcat localhost 11211 STAT maxbytes 134217728 STAT maxconns 1024 STAT tcpport 11211 STAT udpport 11211 STAT inter 127.0.0.1 STAT verbosity 0 STAT oldest 0 STAT evictions on STAT domain_socket NULL STAT umask 700 STAT growth_factor 1.25 STAT chunk_size 48 STAT num_threads 4 STAT num_threads_per_udp 4 STAT stat_key_prefix : STAT detail_enabled no STAT reqs_per_event 20 STAT cas_enabled yes STAT tcp_backlog 1024 STAT binding_protocol auto-negotiate STAT auth_enabled_sasl no STAT item_size_max 2097152 STAT maxconns_fast no STAT hashpower_init 0 STAT slab_reassign no STAT slab_automove 0 STAT lru_crawler no STAT lru_crawler_sleep 100 STAT lru_crawler_tocrawl 0 STAT tail_repair_time 0 STAT flush_enabled yes STAT hash_algorithm jenkins END ^C
Unter item_size_max ist die neue Einstellung zu erkennen. Alternativ kann auch phpMemcachedAdmin verwendet werden, um den Inhalt der Caches anzuzeigen.