Varnish: Różnice pomiędzy wersjami

m (Budek przeniósł stronę SPF na Varnish, bez pozostawienia przekierowania pod starym tytułem)
Linia 1: Linia 1:
 
{{Stub}}
 
{{Stub}}
''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ą własny, działający zawsze system cache, niezależny od varnisha.
+
''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.
  
=== Warunki konieczne ===
+
===  ===
  
Aby strona została załadowana z pamięci:
+
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 Varnishem. 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.
* 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.
 
  
do zrobienia poniżej:
+
W warunkach testowych MyDevil ustaliło, że niektóre z popularnych CMSów (WordPress, Joomla!) w standardowej konfiguracji bezproblemowo współpracują z Varnishem, inne (MediaWiki) wymagają kilku zmian w kodzie strony. Natomiast praktycznie każdy skrypt forum nie nadaje się do współpracy z Varnishem ze względu na sposób działania.
<!---
 
  
=== Kontrola zachowania cache ===
+
=== Wstępna konfiguracja domeny ===
  
Okres, na jaki strona ma być cache'owana można ustawić, używając na stronie nagłówka Cache-control. Na przykład: jeżeli chcemy aby nasza strona lub jej konkretna podstrona były przechowywane przez okres 10 minut można wysyłać nagłówek: Cache-Control: public, max-age=600. Jeżeli w ogóle nie użyjemy na stronie tego nagłówka, a będzie ona spełniać warunki, czas jej przechowywania w cache to 120 sekund (2 min).
+
Aby dodać Varnish do naszej strony należy najpierw zadbać o odpowiednią konfigurację domeny oraz [[DNS]]. Trzeba ustawić domenę typu pointer na swoją stronę oraz należy ustawić wpis A cache'owanej domeny na odpowiedni serwer Varnisha.
 +
 +
{| class="wikitable"
 +
|-
 +
! serwer mydevil !! adres IP Varnisha !! nazwa domenowa Varnisha
 +
|-
 +
| 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
 +
|}
  
 +
==== Przykład ====
  
Używanie varnisha i diagnostyka¶
+
Strona WWW znajduje się w domenie adam.usermd.net i znajduje się na serwerze s4.mydevil.net. Aby dostać się na tę stronę przez domenę adam.pl należy w ustawieniach DNS domeny adam.pl dodać rekord A z zawartością 213.189.55.195. Następnie należy dodać nową stronę WWW z domeną adam.pl, typem pointer i wskaźnikiem na adam.usermd.net.
 +
 +
=== Warunki konieczne  ===
  
Aby dana domena korzystała z naszego varnisha, musi ona wskazywać na odpowiedni adres IP w zależności od przyznanego zestawu serwerów:
+
Aby strona została załadowana z pamięci:
 
+
* nie może ustawiać cookies
dla web0: 212.91.26.155  (nazwa DNS: cache0.mydevil.net),
+
* 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.
dla web1: 212.91.26.152  (nazwa DNS: cache1.mydevil.net),
 
dla web2: 212.91.26.159  (nazwa DNS: cache2.mydevil.net),
 
dla  s3: 185.36.169.156 (nazwa DNS: cache3.mydevil.net).
 
W przypadku innych adresów strona w ogóle nie przechodzi przez akcelerator. Jeżeli mamy witrynę example.com i chcielibyśmy przetestować jej działanie z varnishem, można nakierować np. subdomenę cache.example.com na adres serwera cache'ującego oraz dodać stronę typu pointer wskazującą na example.com  Więcej informacji: o tworzeniu domeny, o stronie typu pointer. Przypominamy, że można tę operację wykonać zarówno z panelu DevilWEB2, jak i z konsoli, za pomocą Devil2. Polecenie w konsoli: devil www add cache.example.com pointer example.com
 
  
 +
=== Kontrola zachowania cache ===
  
Po rozpropagowaniu DNS możemy testować jak zachowuje się nasza strona. Aby sprawdzić czy w ogóle strona jest cache'owana oraz poznać ewentualny powód jej 'odrzucenia' można posłużyć się narzędziem curl:
+
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 <code>Cache-control</code>. Na przykład nagłówek <code>Cache-Control: public, max-age=600</code> skutkuje zmianą czasu na 600 sekund.
  
curl -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ładowo, otrzymując w odpowiedzi:
 
  
Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0
+
=== Diagnostyka ===
X-Cacheable: NO:Cache-control=no-cache
 
Widzimy, że strona jest przekazywana dalej, z powodu nagłówka Cache-Control zabraniającego cachowania. Z kolei przykładowa odpowiedź:
 
  
Cache-Control: public, max-age=600
+
Aby sprawdzić czy strona jest cache'owana oraz poznać ewentualny powód jej 'odrzucenia' można posłużyć się poleceniem<code>curl -sI <nowiki>http://cache.example.com/</nowiki> |egrep "X-Cache|Cache-Control|Age|Expires"</code>
X-Cacheable: YES
+
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.  
Age: 0
 
X-Cache: MISS
 
Będzie oznaczała, że 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, powinniśmy zobaczyć wynik podobny do poniższego:
 
  
Cache-Control: public, max-age=600
+
==== Przykłady ====
X-Cacheable: YES
 
Age: 25
 
X-Cache: HIT
 
Nagłówek X-Cache: Hit oznacza, że varnish wysłał nam 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) nasze interpretatory PHP będą wolne od konieczności przetwarzania takiego żądania.
 
  
Czego można używać z varnishem?¶
+
{{prompt}}curl -sI <nowiki>http://cache.example.com/</nowiki> |egrep "X-Cache|Cache-Control|Age|Expires"
 +
{{output}}Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0
 +
X-Cacheable: NO:Cache-control=no-cache{{endoutput}}
 +
Strona jest przekazywana dalej z powodu nagłówka Cache-Control zabraniającego cachowania.
  
Ponieważ strona musi spełniać pewne warunki, nie wszystkie nadają się do użycia 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 varnishem, i nie ma sensu go dla nich używać. Z kolei takie strony jak blogi, strony domowe, firmowe - słowem, nie zmieniające się bardzo często i w większości nie używające logowania (a co za tym idzie - ciasteczek) mogą zostać przyspieszone tymże narzędziem, jednak zależy to też od działania i budowy takiej strony.
+
{{prompt}}curl -sI <nowiki>http://cache.example.com/</nowiki> |egrep "X-Cache|Cache-Control|Age|Expires"
 +
{{output}}Cache-Control: public, max-age=600
 +
X-Cacheable: YES
 +
Age: 0
 +
X-Cache: MISS{{endoutput}}
 +
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:
  
W warunkach testowych udało nam się ustalić, że niektóre z popularnych CMSów (WordPress, Joomla!) w standardowej konfiguracji bezproblemowo współpracują z Varnishem, inne (MediaWiki) wymagają kilku zmian w kodzie strony, a jeszcze inne (praktycznie każdy skrypt forum) nie nadają się do współpracy z Varnishem ze względu na ich sposób działania.
+
{{prompt}}curl -sI <nowiki>http://cache.example.com/</nowiki> |egrep "X-Cache|Cache-Control|Age|Expires"
 +
{{output}}Cache-Control: public, max-age=600
 +
X-Cacheable: YES
 +
Age: 25
 +
X-Cache: HIT{{endoutput}}
 +
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.
  
-->
+
[[Category:WWW]]

Wersja z 13:47, 25 lut 2015

Szablon:Stub 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 Varnishem. 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 (WordPress, Joomla!) w standardowej konfiguracji bezproblemowo współpracują z Varnishem, inne (MediaWiki) wymagają kilku zmian w kodzie strony. Natomiast praktycznie każdy skrypt forum nie nadaje się do współpracy z Varnishem ze względu na sposób działania.

Wstępna konfiguracja domeny

Aby dodać Varnish do naszej strony należy najpierw zadbać o odpowiednią konfigurację domeny oraz DNS. Trzeba ustawić domenę typu pointer na swoją stronę oraz należy ustawić wpis A cache'owanej domeny na odpowiedni serwer Varnisha.

serwer mydevil adres IP Varnisha nazwa domenowa Varnisha
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

Przykład

Strona WWW znajduje się w domenie adam.usermd.net i znajduje się na serwerze s4.mydevil.net. Aby dostać się na tę stronę przez domenę adam.pl należy w ustawieniach DNS domeny adam.pl dodać rekord A z zawartością 213.189.55.195. Następnie należy dodać nową stronę WWW z domeną adam.pl, typem pointer i wskaźnikiem na adam.usermd.net.

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.