Sådan undgår du caching af statiske elementer

Hos Magentohotel benyttes et cluster af nginx-loadbalancere, både for at shape trafikken, men også for at hæve hastigheden på kundernes sites ved at cache statiske elementer.

 

Beslutter man sig for at udvikle/ændre på websites i produktion kan man opleve problemer med, at rettelser ikke slår igennem på sitet. Et eksempel på et statisk element kunne være en .css fil.

 

Lad os starte med at se på en header for styles.css:

HTTP/1.1 200 OK
Server: nginx
Date: Fri, 07 Mar 2014 11:22:08 GMT
Content-Type: text/css
Content-Length: 17939
Connection: keep-alive
Last-Modified: Thu, 05 Jul 2012 10:49:57 GMT
ETag: "175e8"
Cache-Control: max-age=604800
Expires: Fri, 14 Mar 2014 11:22:08 GMT
Vary: Accept-Encoding,User-Agent
Content-Encoding: gzip
X-Served-By: Apache, PHHW-121001: prod12.magentohotel.dk, 130.185.133.138, vhost = demo
X-PH-Static-Cache: HIT
Accept-Ranges: bytes

 

Ovenstående header giver en række informationer, men i denne sammenhæng er X-PH-Static-Cache den vigtigste. Den fortæller, at det pågældende element er cached(HIT) af loadbalanceren. Skulle man efterfølgende have lavet en ændring i .css-filen vil denne ikke kunne ses da versionen på loadbalanceren da er ældre end den nye fil.

 

Heldigvis er det let at tvinge loadbalanceren til at opdatere filen i cachen. Det gøres ved, at inkludere pragma: no-cache i get-kommandoen man sender via sin browser. Alt efter hvilket mix operativ system og browser man benytter findes der forskellige kommandoer for at lave en såkaldt force-refresh. Herunder findes en liste over de forskellige browsere:

 

Windows +

  • - Internet Explorer (ctrl + F5)
  • - Firefox (ctrl + F5)

OS X +

  • - Firefox (cmd+shift+r)

Systems Engineer @ Powerhosting ApS