Så fungerar NGINX fastcgi cache med WordPress

Dennis Andersson – april 10, 2021

Nginx innehåller en FastCGI-modul som har direktiv för cachning av dynamiskt innehåll som serveras från WordPress. Att ställa in detta tar bort behovet av ytterligare lösningar för sid-cachningar som Varnish eller WordPress plugins. Innehåll kan också uteslutas från cachning baserat på förfrågningsmetoden, URL, cookies eller någon annan servervariabel. Man vill tex inte cacha det som ligger bakom /wp-admin eller om man har en cookie som säger att man är inloggad.

Hur fungerar NGINX fastcgi cache?

När någon besöker din WordPress-webbplats måste din server köra PHP och fråga din databas för att leverera den slutliga HTML-sidan till dina besökares webbläsare. Caching fungerar genom att lagra den slutliga HTML-sidan och automatiskt leverera den till besökare, istället för att dynamiskt återge ditt innehåll för varje besök.

Genom att eliminera denna backend-bearbetning kan cachning påskynda din webbplats och minska belastningen på din server.

Med Nginx kan du göra något liknande via sin fastcgi_cache-modul men på servernivå. Det vill säga att Nginx kan servera ditt cachade innehåll direkt utan att behöva involvera PHP eller WordPress.

Däremot, med ett cacheplugin, måste varje begäran fortfarande hanteras av PHP på applikationsnivå. Ett caching-plugin eliminerar fortfarande mycket av arbetet och är definitivt positivt för din webbplats, men det kräver också fler CPU-cykler än att använda Nginx för att hantera begäran på servernivå. Därför är NGINX cache det bästa alternativet för WordPress och används av det mest moderna webbhotellen för wordpress.

Så aktiverar du NGINX fastcgi cache för WordPress

Redigera huvudkonfigen för nginx

sudo nano /etc/nginx/nginx.conf

I http avsnittet lägg till:

fastcgi_cache_path /usr/share/nginx/fastcgi_cache levels=1:2 keys_zone=WORDPRESS:100m max_size=10g inactive=60m use_temp_path=off;
fastcgi_cache_key "$scheme$request_method$host$request_uri";

Nu är cachen aktiverad i nginx men vi behöver också ställa in per site att och hur den ska användas det gör vi genom att redigera filen under conf.d.

sudo nano /etc/nginx/conf.d/din-hemsida.conf

Hitta stycket som ser ut såhär: location ~ .php$

Lägg till detta inom location blocket

fastcgi_cache WORDPRESS;
fastcgi_cache_valid 200 301 302 60m;
fastcgi_cache_use_stale error timeout updating invalid_header http_500 http_503;
fastcgi_cache_min_uses 1;
fastcgi_cache_lock on;
fastcgi_cache_bypass $skip_cache; 
fastcgi_no_cache $skip_cache;
add_header X-FastCGI-Cache $upstream_cache_status;

Spara filen och testa konfigurationen genom att köra

sudo nginx -t

Om allt ser bra ut reloadar vi NGINX konfigurationen

sudo service nginx reload eller sudo systemctl reload nginx

Testa om cachen fungerar

curl -I http://www.din-hemsida.com

I svaret bör du se X-FastCGI-Cache header. HIT om du testar två gånger. Första gången så är sidan ocachad och nästa ska den vara cachad.

Lägg till cacheregler för WordPress

Lägg detta ovanför location blocket med location ~ .php$ i /etc/nginx/conf.d/din-hemsida.conf

set $skip_cache 0;
# POST requests and urls with a query string should always go to PHP
if ($request_method = POST) {
set $skip_cache 1;
}
if ($query_string != "") {
set $skip_cache 1;
}
# Don't cache uris containing the following segments
if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-..php|^/feed/|/tag/./feed/|index.php|/.sitemap..(xml|xsl)") {
set $skip_cache 1;
}
# Don't use the cache for logged in users or recent commenters
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
set $skip_cache 1;
}

Velumi och NGINX fastcgi cache

På Velumi använder vi NGINX fastcgi cache eller nginx redis cache i alla våra paket färdigkonfigurerat och optimerat med automatisk rensning när du uppdaterar en sida i WordPress. Kontakta oss i chatten om du har några frågor eller om du vill veta mer.

Vill ni veta mer?

Kolla in hur vi kan hjälpa er med WordPress Webbhotell


Liknade artiklar