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 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.
Spis treści
Konfiguracja domeny
Aby dodać Varnisha do istniejącej już strony domena należy:
- Dodać stronę WWW varnish.domena o takim samym typie co domena.
- Przenieść pliki ze strony domena do varnish.domena.
- Usunąć stronę WWW domena.
- Dodać stronę WWW domena typu pointer ze wskaźnikiem na varnish.domena.
- 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.