Joissakin tapauksissa on tarpeen rajoittaa palvelintason välimuistitusta tietyille tiedostoille tai osoitteille. Tämä on hyödyllistä erityisesti usein päivittyville dynaamisille tiedostoille, jotta vierailijat näkevät aina tuoreimman version.
Tärkeää: Tilanteet, joissa HTTP-välimuisti on jo poissa käytöstä
Ennen kuin teet muutoksia välimuistin rajoittamiseen, huomioithan, että HTTP-välimuisti on automaattisesti pois käytöstä seuraavissa tilanteissa:
Varjoympäristöt (Shadow/Staging): Välimuisti on oletuksena pois käytöstä, jotta kehittäjät näkevät muutokset heti testauksen aikana.
WP_DEBUG-tila: HTTP-välimuisti ohitetaan, mikäli
define('WP_DEBUG', true);on käytössäwp-config.php-tiedostossa.WooCommerce: Kriittiset verkkokauppasivut, kuten Ostoskori, Kassa ja Oma tili, on palvelussamme rajattu välimuistin ulkopuolelle dynaamisen toiminnallisuuden varmistamiseksi.
Istunnot ja evästeet: Jos teema tai lisäosa kutsuu
session_start()-funktiota tai asettaa evästeen (setcookie()), HTTP-välimuisti kytkeytyy automaattisesti pois päältä kyseisen pyynnön osalta yksityisen tiedon suojaamiseksi.
WordPress ja PHP
Joustavin tapa hallita välimuistia WordPressissä on käyttää send_headers-toimintoa.
Vaihtoehto A: Ehdollinen välimuistitus (functions.php)
Voit kohdentaa rajoituksen tietyille sivuille WordPressin ehdollisilla tunnisteilla (kuten is_page()). Lisää tämä teemasi functions.php-tiedostoon:
add_action('send_headers', 'seravo_disable_page_cache');
function seravo_disable_page_cache() {
if (is_page('my-dynamic-page')) {
header("Cache-Control: no-cache, no-store, must-revalidate, max-age=0");
header("Expires: Wed, 11 Jan 1984 05:00:00 GMT");
}
}
Vaihtoehto B: Yksittäinen PHP-tiedosto
WordPressin ulkopuolisissa PHP-skripteissä lisää nämä otsakkeet tiedoston aivan alkuun:
<?php
header("Cache-Control: no-cache, no-store, must-revalidate, max-age=0");
header("Expires: Wed, 11 Jan 1984 05:00:00 GMT");
Verkkopalvelimen asetukset (nginx)
Jos haluat rajoittaa staattisten tiedostojen (kuten .json tai .pdf) tai tiettyjen hakemistojen välimuistitusta, luo kustomoitu asetustiedosto polkuun /data/wordpress/nginx/.
Esimerkki: Välimuistin estäminen tietyssä hakemistossa
Luo tiedosto, esim. /data/wordpress/nginx/cache-control.conf:
# Estä välimuistitus kaikilta tiedostoilta hakemistosta /data-exports/
location ^~ /data-exports/ {
add_header 'Cache-Control' 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
expires off;
}
Huom! Muutokset tulevat voimaan vasta, kun nginx käynnistetään uudelleen komennolla wp-restart-nginx.
Huomio objektivälimuistista (Redis)
Objektivälimuistin (tietokantakyselyt ja PHP-objektit) rajoittamista sivukohtaisesti ei suositella. Jos kuitenkin tulee tarve näyttää tuoretta dataa – esimerkiksi reaaliaikaisia varastosaldoja tai vaihtuvia pörssikursseja – on parasta ohittaa välimuisti kooditasolla:
// Esimerkki: Ohita välimuisti tietyssä WP_Query-kyselyssä
$args = array(
'post_type' => 'product',
'cache_results' => false,
'update_post_meta_cache' => false,
'update_post_term_cache' => false,
);
$query = new WP_Query($args);
Välimuistiasetusten testaaminen
Voit varmistaa välimuistirajoitusten toimivuuden Seravon omalla komentorivityökalulla. Voit testata komennolla etusivun tai tietyn alasivun:
# Testaa etusivu
wp-check-http-cache
# Testaa tietty osoite
wp-check-http-cache https://esimerkki.fi/dynaaminen-sivu/
Työkalu kertoo, tarjoiltiinko sivu välimuistista (HIT) vai ohitettiinko se (MISS tai BYPASS).
Suosittelemme
Suosittelemme käyttämään lyhyttä välimuistin kestoa (esim. 60 sekuntia) välimuistin poistamisen sijaan, aina kun se on mahdollista. Tämä pitää sisällön tuoreena, mutta suojaa silti palvelinta ja sivustoa liikennepiikeiltä sekä DoS-hyökkäyksiltä.
Voit asettaa 60 sekunnin välimuistiajan PHP:lla seuraavasti:
header("Cache-Control: public, s-maxage=60, max-age=60");
Lisätietoja välimuistiarkkitehtuurimme toiminnasta ja lyhyiden välimuistiaikojen hyödyistä löydät ohjeestamme: Miten välimuistitus toimii?
