Siirry pääsisältöön

Välimuistin rajoittaminen ja otsakkeiden asettaminen

Opas välimuistin rajoittamiseen ja HTTP-otsakkeiden hallintaan Seravolla. Lue kuinka poistat välimuistin käytöstä tietyillä sivuilla tai tiedostotyypeillä PHP:n tai nginxin avulla.

Päivitetty tänään

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?

Vastasiko tämä kysymykseesi?