Varnish

Wersja z dnia 11:56, 1 wrz 2015 autorstwa Budek (dyskusja) (Konfiguracja domeny)

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 zainstalowanie 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:

  1. Dodać stronę WWW varnish.domena o takim samym typie co domena.
  2. Przenieść pliki ze strony domena do varnish.domena.
  3. Usunąć stronę WWW domena.
  4. Dodać stronę WWW domena typu pointer ze wskaźnikiem na varnish.domena.
  5. W strefie DNS domena ustawić rekord A na adres IP odpowiedniego serwera Varnisha zgodnie z tabelą poniżej.
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

Przykład

Na przykład na serwerze s4.mydevil.net użytkownik jan hostuje stronę swojej firmy na domenie firmajana.pl. Strona jest napisana w php spełnia wszystkie wymagania, aby mogła korzystać z Varnisha. W panelu utworzono nową stronę WWW typu php o domenie varnish.firmajana.pl. Przeniesiono pliki z katalogu /usr/home/jan/domains/firmajana.pl do katalogu /usr/home/jan/domains/varnish.firmajana.pl. Następnie w panelu usunięto stronę WWW firmajana.pl. Następnie dodano nową stroną WWW, gdzie:

  • "Nazwa domeny" to firmajana.pl;
  • "Typ" to Pointer;
  • "Wskaźnik na" to varnish.firmajana.pl.

Później w strefie DNS edytowano domenę firmajana.pl. Usunięto obecny wpis typu A i dodano nowy, gdzie:

  • "Wpis" to firmajana.pl;
  • "Typ" to A;
  • "Zawartość" to 213.189.55.195;
  • "TTL" to 3600.

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'owana 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.