Varnish

Varnish to akcelerator stron www. Wygenerowany przez backend (np. PHP) kod html zapisuje w pamięci. Zamiast za każdym razem przekazywać żądanie do backendu korzysta z przygotowanej wcześniej kopii. Pozwala to zmniejszyć obciążenie generowane przez stronę (zużycie interpretatorów), a co za tym idzie zwiększyć możliwą liczbę jej wywołań. Na serwerach MyDevil varnish cachuje tylko treści dynamiczne. Części statyczne stron mają niezależny od Varnisha system cache.

Nie wszystkie strony współpracują z Varnishem. Strony, które dla każdego użytkownika generują inną zawartość (np. gry przeglądarkowe, zamknięte fora) nie nadają się do cache'owania. Z kolei strony, których zawartość nie zmienia się bardzo często i w większości te, które nie używają logowania (a co za tym idzie - ciasteczek) dobrze z nim współpracują (np. blogi, strony domowe, firmowe), jednak zależy to też od działania i budowy takiej strony.

W warunkach testowych MyDevil ustaliło, że niektóre z popularnych CMSów (Joomla!) w standardowej konfiguracji bezproblemowo współpracują z Varnishem, inne (MediaWiki) wymagają kilku zmian w kodzie strony lub zainstalowania dodatkowego pluginu (WordPress, przykładowy plugin to Varnish WordPress). Natomiast praktycznie każdy skrypt forum nie nadaje się do współpracy z Varnishem ze względu na sposób działania.

Konfiguracja domeny

Aby dodać Varnisha do istniejącej już strony domena należy zmienić adres IP w strefie DNS danej 'domeny' na IP Varnisha.

serwer mydevil adres IP Varnisha nazwa domenowa Varnisha
s0.mydevil.net 212.91.26.155 cache0.mydevil.net
s1.mydevil.net 212.91.26.152 cache1.mydevil.net
s2.mydevil.net 212.91.26.159 cache2.mydevil.net
s3.mydevil.net 185.36.169.156 cache3.mydevil.net
s4.mydevil.net 213.189.55.195 cache4.mydevil.net
s5.mydevil.net 31.186.82.252 cache5.mydevil.net
s6.mydevil.net 85.194.241.80 cache6.mydevil.net
s7.mydevil.net 91.185.185.212 cache7.mydevil.net
s8.mydevil.net 85.194.246.96 cache8.mydevil.net
s9.mydevil.net 85.194.241.159 cache9.mydevil.net
s10.mydevil.net 185.36.169.142 cache10.mydevil.net
s11.mydevil.net 91.185.184.174 cache11.mydevil.net
s12.mydevil.net 128.204.216.223 cache12.mydevil.net
s13.mydevil.net 128.204.217.109 cache13.mydevil.net
s14.mydevil.net 128.204.216.237 cache14.mydevil.net
s15.mydevil.net 128.204.218.146 cache15.mydevil.net
s16.mydevil.net 77.79.250.103 cache16.mydevil.net
s17.mydevil.net 85.194.246.222 cache17.mydevil.net
s18.mydevil.net 85.194.241.97 cache18.mydevil.net
s19.mydevil.net 91.185.184.230 cache19.mydevil.net
s20.mydevil.net 128.204.219.84 cache20.mydevil.net
s21.mydevil.net 77.79.250.64 cache21.mydevil.net
s22.mydevil.net 91.185.185.201 cache22.mydevil.net
s23.mydevil.net 185.36.170.234 cache23.mydevil.net

Przykład

Jeżeli mamy witrynę 'domena' i chcielibyśmy przetestować jej działanie z Varnishem można dodać stronę www typu pointer 'varnish.domena' wskazującą na 'domena' i następnie w strefie dns dodać wpis A kierujący 'varnish.domena' na adres IP Varnish. Testowa strona będzie dostępna pod adresem 'varnish.domena'.

Warunki konieczne

Aby strona została załadowana z pamięci:

  • nie może ustawiać cookies,
  • odpowiedź nie może zawierać nagłówka zabraniającego cache'owaia, np. Cache-control: no-cache, Pragma: nocache czy też Expires: z datą dawniejszą niż aktualna.

Kontrola zachowania cache

Domyślny czas przechowywania strony w cache'u to 2 minuty. Aby zmienić okres cache'owania strony należy użyć na stronie nagłówka Cache-control. Na przykład nagłówek Cache-Control: public, max-age=600 skutkuje zmianą czasu na 600 sekund.


Diagnostyka

Aby sprawdzić czy strona jest cache'owana oraz poznać ewentualny powód jej 'odrzucenia' można posłużyć się poleceniemcurl -sI http://cache.example.com/ |egrep "X-Cache|Cache-Control|Age|Expires" Takie polecenie pozwoli obejrzeć jakie nagłówki zostały odebrane. Nagłówek X-Cacheable jest dodawany przez Varnisha i pozwala określić czy strona może być zapisana w pamięci podręcznej, czy też nie oraz dlaczego.

Przykłady

curl -sI http://cache.example.com/ |egrep "X-Cache|Cache-Control|Age|Expires"
Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0
X-Cacheable: NO:Cache-control=no-cache

Strona jest przekazywana dalej z powodu nagłówka Cache-Control zabraniającego cachowania.

curl -sI http://cache.example.com/ |egrep "X-Cache|Cache-Control|Age|Expires"
Cache-Control: public, max-age=600
X-Cacheable: YES
Age: 0
X-Cache: MISS

Strona została dodana do cache, jednak to konkretne żądanie zostało przekazane dalej (ponieważ w pamięci nie było jeszcze odpowiednio świeżej wersji). Wykonując takie samo polecenie chwilę później, widać wynik podobny do poniższego:

curl -sI http://cache.example.com/ |egrep "X-Cache|Cache-Control|Age|Expires"
Cache-Control: public, max-age=600
X-Cacheable: YES
Age: 25
X-Cache: HIT

Nagłówek X-Cache: Hit oznacza, że Varnish wysłał kopię z pamięci podręcznej, która została utworzona 25 sekund temu (nagłówek Age), co oznacza, że jeszcze przez 575 sekund (max-age=600 - Age) interpretatory PHP będą wolne od konieczności przetwarzania takiego żądania.