Nginx PHP Cache für WordPress

matz

Active Member
Bei mir sieht es so aus:
In der /etc/nginx/conf.d habe ich eine kleine 000-meine-website.conf-Datei mit folgendem Inhalt erstellt:
Code:
fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=WORDPRESS:500m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout invalid_header http_500;
add_header X-Cache $upstream_cache_status;

Im ISPC in den Optionen der Website steht folgende Direktive:
Code:
#Cache everything by default
set $no_cache 0;

#Don't cache POST requests
if ($request_method = POST)
{
    set $no_cache 1;
}

#Don't cache if the URL contains a query string
if ($query_string != "")
{
    set $no_cache 1;
}

#Don't cache the following URLs
if ($request_uri ~* "/(administrator/|login.php)")
{
    set $no_cache 1;
}

#Don't cache if there is a cookie called PHPSESSID
if ($http_cookie = "PHPSESSID")
{
    set $no_cache 1;
}
location @php { ##merge##
    fastcgi_cache_bypass $no_cache;
    fastcgi_no_cache $no_cache;  
    fastcgi_cache WORDPRESS;
    fastcgi_cache_valid 200 60m;  
}

location / { ##merge##
    try_files $uri $uri/ /index.php?$args;
    if (!-e $request_filename) {
         rewrite ^(.+)$ /index.php?q=$1 last;
     }
}

Das hat die Geschwindigkeit um das erwähnte 4-5fache erhöht, HTTP/2 trägt auch seinen Teil dazu bei. Mit Wordpress kann man das ohne viel Aufwand testen. Einfach irgendein aktuelles Theme aktivieren und einige neue Blogbeiträge mit gefühlt 10 Tonnen Lorem ipsum füllen. Das lässt die Datenbank etwas schuften und der Cache füllt sich. Beim Load-Test mit Jmeter eine großzügige Hochlauf-Rampe einstellen (so um die 20-30s) und die "Angreifer"-Anzahl entsprechend den Server-Möglichkeiten einstellen. Bei mir reichen 500 gleichzeitig damit alles fehlerfrei läuft, bis 1500 ist es noch verträglich. Verzichte ich auf HTTPest und verwende HTTP dann sind 2000 so gut wie fehlerfrei und ich erreiche 900-950 saubere Anfragen per Sekunde. Bei meinem mickrigen Server kann ich damit sehr gut leben.
 
Zuletzt von einem Moderator bearbeitet:

reSh

Member
Nice und deutlich sauberer als die ganzen Caching Plugins. Wie siehts da mit der Invalidierung aus? Eingestellt hast du da ja eine Stunde (60m) kann man das auch forcieren - um Typos zu killen oder so?
 

matz

Active Member
Ich teste es nicht im Produktiv-Modus weil es meine Spielwiese ist und da darf niemand dran ;) Wie man die Zeit einstellt ist m. E. abhängig von jeweiligen Bedarf und da liegen mir keine Erfahrungswerte vor. Die mir bekannte Auslastung sieht in der Praxis eher so aus: Außer den ganz großen (Amazon, Google, vllt. manche Versandhäuser) ist die Besucherzahl pro Website nicht so gewaltig.

Nehmen wir 50 Anfragen pro Sekunde an, dann sind wir mit 50*60*60*24 bei 4.320.000 Besuchern pro Tag. Erreicht hier jemand solche Werte bei seinen Kunden? Bei uns lag der Höchstwert bei ~4.000.

BTW, Was genau meinst du mit Typos killen? Wenn jemand etwas veröffentlicht, es dann korrigiert und die Korrektur trotzdem nicht erscheint? Soviel ich weiß bleibt der Cache stabil bis eine Änderung eintritt oder eben die Zeit abläuft... Oder kam ich da jetzt durcheinander?
 

reSh

Member
BTW, Was genau meinst du mit Typos killen?

Ja genau. Halt nen Rechtschreibfehler beheben. Ich administriere den Server einer Newsseite. Da kommt sowas ab und an mal vor.

Aber ob der den Cache behält bis eine Änderung eintritt? Ich bin mir da nicht sicher. Damit festgestellt werden kann, ob da eine Änderung eingetreten ist, müsste ja das jeweilige Script einmal durchlaufen und damit wäre ja der Cache irgendwie sinnlos. Es sei denn, das passiert parallel während des ersten Aufrufs nach der Änderung.

Ich werd mir mal eine Testseite aufsetzen und das damit mal testen.

dank dir erstmal.
 

Werbung

Top