FastCGI Cache für Desktop und mobile Cache Version konfiguieren

Wer einen Nginx Server betreibt und z.B. Wordpress nutzt den kann ich die Nutzung von FastCGI Cache wärmstens empfehlen.

Hier gibt es eine Anleitung wie der Cache für Wordpress eingerichtet wird.

Wer wie ich Plugins nutzt welche unterschiedlichen Code an den Browser je nach Endgerät ausgibt - z.B. das Easy Social Sharing Plugin - hat ein Darstellungsproblem je nach der gespeicherten Version im Cache.

Das o.g. Plugin liefert Sharing Buttons für mobile Webseiten in einem anderen Ausgabeformat.

Besucht nun ein Nutzer mit einem Desktop Gerät die Seite erhält er die zuvor eventuell gespeicherte mobile Version angezeigt bzw. umgekehrt.

Es ist nun erforderlich den FastCGI Cache so zu konfigurieren, dass er zwei verschiedene Versionen einer Seite im Cache speichert - Desktop und mobile Version.

Folgenden Code habe ich hinzugefügt - in der Server Config für die jeweilige Domain.

Suche diese Zeile:

fastcgi_cache_key "$scheme$request_method$host$request_uri$";

und füge am Ende nach dem letzten $ diesen Code ein:

mobile_request

sieht dann so aus

fastcgi_cache_key "$scheme$request_method$host$request_uri$mobile_request";

nun suche diesen Code (wie aus o.g. Anleitung)

if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
        set $skip_cache 1;
    }

und füge danach das ein:

set $mobile_request 0;

if ($http_user_agent ~* "(2.0 MMP|240x320|400X240|AvantGo|BlackBerry|Blazer|Cellphone|Danger|DoCoMo|Elaine/3.0|EudoraWeb|Googlebot-Mobile|hiptop|IEMobile|KYOCERA/WX310K|LG/U990|MIDP-2.|MMEF20|MOT-V|NetFront|Newt|Nintendo Wii|Nitro|Nokia|Opera Mini|Palm|PlayStation Portable|portalmmm|Proxinet|ProxiNet|SHARP-TQ-GX10|SHG-i900|Small|SonyEricsson|Symbian OS|SymbianOS|TS21i-10|UP.Browser|UP.Link|webOS|Windows CE|WinWAP|YahooSeeker/M1A1-R2D2|NF-Browser|iPhone|iPad|iPod|Android|BlackBerry9530|G-TU915 Obigo|LGE VX|webOS|Nokia5800)" ) {
 set $mobile_request 1;
}

Wer z.B. das Plugin wptouch nutzt fügt noch diesen Code an:

if ($http_cookie ~ 'wptouch-pro-view=desktop') {
 set $mobile_request 0;
}

Jetzt speichern und service nginx restart ausführen.

Den Cache noch löschen. Wordpress Nutzer installieren sich den Nginx Helper.