Cache-Control-otsakkeiden määrittäminen Apachessa

  • Anthony Heddings
  • July 29, 2020, 11:00am EDT

apache

Kaikkien käyttäjien selain käyttää sisäänrakennettua välimuistia ladattujen objektien tallentamiseen, mikä voi nopeuttaa merkittävästi toistuvia käyntejä verkkosivuillesi lataamalla ne levyltä verkon sijaan. Tässä kerrotaan, miten se määritetään Apachessa.

Miten välimuisti toimii?

Kun käyttäjä ottaa ensimmäisen kerran yhteyden sivustoosi, hän lataa kaikki sivun renderöintiin tarvittavat staattiset resurssit, mukaan lukien asiat kuten logosi. Kun hän siirtyy uudelle sivulle, se lataa logosi muistista sen sijaan, että se kysyisi sitä uudelleen, mikä nopeuttaa suorituskykyä huomattavasti ja vähentää samalla verkkopalvelimesi kuormitusta.

Tämä on asiakaspuolen välimuisti, mutta monet sivustot käyttävät myös sisällönjakeluverkkoa eli CDN:ää. CDN on palvelinverkko, joka sijaitsee pääverkkopalvelimesi eli ”alkuperäisen” palvelimesi edessä. Tämä verkko tallentaa sivut välimuistiin, mikä lisää kaistanleveyden maksimimäärää, vähentää käyttöviivettä ja vähentää huomattavasti alkuperäispalvelimen kuormitusta. Jos haluat lisätietoja CDN-verkoista, voit lukea niitä koskevan oppaamme täältä.

Cache-Control on otsake, jonka voit määrittää verkkopalvelimesi lisäämään kaikkiin lähteviin pyyntöihin ja joka kertoo selaimelle ja CDN-verkoille, miten sisältösi tallennetaan välimuistiin.

Mainos

Tietyt sivut eivät koskaan saisi tallentaa välimuistiin jaetuissa välimuisteissa, kuten CDN-verkoissa. Näin tehdessä on vaarana, että yhden käyttäjän henkilökohtaiset tiedot näkyvät muille. Yleissääntönä on, että jos sivu tulee olemaan täsmälleen sama kaikille käyttäjille, kuten kotisivusi, voit tallentaa sen välimuistiin. Jos se näyttää luottamuksellisia käyttäjätietoja, se kannattaa laittaa mustalle listalle välimuistista. Staattiset resurssit, kuten CSS ja kuvat, voidaan yleensä tallentaa välimuistiin kaikille, usein paljon pidemmäksi aikaa.

Objektin välimuistissa viettämä aika on myös tärkeä. Time-To-Live (TTL) -nimellä kutsuttu välimuistissa olevien resurssien enimmäisikä määrittää, kuinka kauan objekti pysyy välimuistissa ennen kuin se mitätöidään ja käyttäjää kehotetaan pyytämään uutta objektia. Staattisille resursseille, jotka eivät muutu paljon, voit asettaa hyvin korkeita TTL-arvoja, yleensä noin kaksi vuotta. Kohteille, joita saatat haluta päivittää, kannattaa asettaa alhaisemmat TTL-arvot, jotta vanhentuneet resurssit eivät ole välimuistissa liian kauan.

Välimuistin uudelleenlatauksen voi aina käynnistää versioiduilla tiedostonimillä. Jos julkaiset uuden version CSS-tyylitiedostosta, voit nimetä sen styles-1.0.1.css, jolloin käyttäjän selain (ja sen edessä olevat CDN:t) näkevät sen uutena tiedostona, joka on ladattava uudelleen. Lisäksi joidenkin CDN:ien osalta voit antaa manuaalisia invalidointeja olemassa olevan välimuistin tyhjentämiseksi muuttamatta tiedostonimiä.

How to Use Cache-Control in Apache

Cache-Control on muutamia vaihtoehtoja:

  • public – Voi olla kenen tahansa välimuistissa, mukaan lukien selaimet ja CDN:t. Käytä tätä useimmille staattisille objekteille.
  • private – Sisältää arkaluonteisia tietoja, joita CDN:t tai käänteiset välityspalvelimet eivät voi tallentaa välimuistiin. Käyttäjän selain voi tallentaa sen välimuistiin paikallisesti. Käytä tätä useimmille todennetuille sivuille.
  • no-cache – Nimestään huolimatta tämä ei poista välimuistitallennusta. Selain voi edelleen tallentaa vastauksen välimuistiin suorituskyvyn vuoksi, mutta sen on tarkistettava päivitykset alkuperäispalvelimelta ennen kuin se käyttää sitä. Käytä tätä, jos haluat, että käyttäjän on validoitava joka kerta uudelleen.
  • no-store – Poistaa välimuistitallennuksen kokonaan käytöstä. Käytä tätä vain erittäin arkaluonteisille tiedoille, joita ei pitäisi lähettää kahdesti.

Lisäksi voit lisätä no-transform-direktiivin, joka poistaa käytöstä kaikki resurssille mahdollisesti tehtävät muunnokset. Esimerkiksi jotkut CDN:t pakkaavat kuvia kaistanleveyden vähentämiseksi. Tämä direktiivi poistaa tämän käyttäytymisen käytöstä.

Apachessa sinun on asetettava tämä otsake manuaalisesti käyttämällä Header set-direktiiviä, esimerkiksi näin:

Header set Cache-Control "max-age=84600, public"

max-age-arvo asetetaan sekunteina, esimerkiksi max-age=300 viiden minuutin TTL:lle ja max-age=63072000 kahdelle vuodelle.

Mainos

Voit sijoittaa tämän direktiivin kokoonpanon juureen ja soveltaa sitä koko sivuston laajuisesti, mutta parempi tapa on soveltaa asetuksia tiedostotyypin mukaan. Jos haluat esimerkiksi asettaa korkean TTL-ajan useimmille staattisille medioille, voit käyttää FilesMatch-lohkoa:

<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$"> Header set Cache-Control "max-age=63072000, public" </FilesMatch>

Jos haluat asettaa tietyn polun mustalle listalle CDN:ien välimuistiin tallentamisen estämiseksi, voit käyttää Directory-lohkoa:

<Directory "/private"> Header set Cache-Control "max-age=300, private" </Directory> 

Od yksinkertaisesti sovittaa yksittäisen tiedoston:

<File "protected.html"> Header set Cache-Control "max-age=300, private" </File>

Lohkot, joissa on tarkemmat sovitukset, ovat etusijalla yleisiin regex-sovituksiin nähden, mutta haluat varmistaa, että kaikki asetetaan oikein vastaanottavassa päässä. Voit tarkistaa tämän Chromen DevToolsista, kohdasta Network > Headers.

chrome devtools network tab

Jos sinulla on pääsy vain .htaccess-konfiguraatioon, voit silti käyttää hakemistojen täsmäytystä luomalla uuden .htaccess-tiedoston jokaiseen alihakemistoon.

Surrogaattiohjauksen käyttäminen CDN-käyttäytymisen muokkaamiseen suoraan

Surrogate-Control-otsake toimii täsmälleen samoin kuin Cache-Control, mutta siinä annetaan tarkat ohjeet CDN:lle ja käänteisille välityspalvelimille loppukäyttäjien sijasta. Näin voit käskeä CDN:iä tekemään yhtä asiaa, mutta lähettämään selaimelle eri suuntaa.

Mainos

Tämä otsake on asetettava manuaalisesti samalla tavalla kuin Cache-Control:

Header set Surrogate-Control "max-age=300, public"

Tulee ehdottomasti testata CDN:lläsi varmistaaksesi, että tämä toimii – Surrogate-Control on melko uusi, eikä se ole yleinen.

Anthony Heddings
Anthony Heddings on LifeSavvy Median vakituinen pilvi-insinööri, tekninen kirjoittaja, ohjelmoija ja Amazonin AWS-alustan asiantuntija. Hän on kirjoittanut satoja artikkeleita How-To Geekiin ja CloudSavvy IT:hen, joita on luettu miljoonia kertoja.Lue koko bio ”

Vastaa

Sähköpostiosoitettasi ei julkaista.