Varnish Optimierung für WordPress
Nachdem wir Varnish-Cache erfolgreich installiert haben und WordPress alle nötigen Plugins erhalten hat, wollen wir die Hit Rate im Varnish erhöhen.
Punkt 1: vcl_recv
Varnish soll alles aus unserem WordPress Blog cachen, außer wp-login.php
, wp-admin
dem Cookie wordpress_logged_in_
und den Suchanfragen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | sub vcl_recv { # WordPress Site adminforge.de # # logged in users must always pass if( req.http.host ~ "adminforge.de" && req.url ~ "^/wp-(login|admin|comments-post)" || req.http.Cookie ~ "wordpress_logged_in_" ){ return (pass); } # don't cache search results if( req.http.host ~ "adminforge.de" && req.url ~ "\?s=" ){ return (pass); } # else ok to fetch a cached page if( req.http.host ~ "adminforge.de" ){ unset req.http.Cookie; return (lookup); } ############################## } |
Ersetzt adminforge.de mit eurer Blog Domain.
Punkt 2: vcl_fetch
Die Backendanfragen erhalten ebenfalls verfeinerte Filter für unsere Blog Domain.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | sub vcl_fetch { # WordPress Site adminforge.de # # only allow cookies to be set if we're in admin area - i.e. commenters stay logged out if( beresp.http.Set-Cookie && req.http.host ~ "adminforge.de" && req.url !~ "^/wp-(login|admin)" ){ unset beresp.http.Set-Cookie; } # don't cache response to posted requests or those with basic auth if ( req.http.host ~ "adminforge.de" && req.request == "POST" || req.http.Authorization ) { return (hit_for_pass); } # only cache status ok if ( req.http.host ~ "adminforge.de" && beresp.status != 200 ) { return (hit_for_pass); } # don't cache search results if( req.http.host ~ "adminforge.de" && req.url ~ "\?s=" ){ return (hit_for_pass); } ############################### } |
Punkt 3: Varnish TTL erhöhen
Die Default-TTL von Varnish beträgt 120 Sekunden. Solch ein niedriger Wert ist spitze für stark besuchte Webseiten, bei denen die Objekte nur kurz im Cache erhalten bleiben sollen. Bei weniger stark besuchten Blogs können wir diesen Wert getrost erhöhen.
1 2 3 4 5 6 7 8 | sub vcl_fetch { # Ignore cache headers from the backend if (beresp.ttl < 48h) { unset beresp.http.expires; set beresp.ttl = 48h; return (deliver); } } |
Punkt 4: Backend Anfragen überprüfen
Nachdem wir Varnish für WordPress optimiert haben, beobachten wir welche Anfragen unseren Webserver noch erreichen.
1 | varnishtop -b -i TxURL |
GJ