
niezależnie od rozmiaru i złożoności aplikacji, użytkownicy będą woleli pozostać lub wracać, jeśli będą cieszyć się szybkością, z jaką dynamiczna zawartość z aplikacji jest renderowana. Poprawiona wydajność, szybkie dostarczanie stron i szybka reakcja serwera to również niektóre z niewielu czynników, które utrzymują użytkowników w kontakcie z Twoją aplikacją.
te i wiele innych są czynnikami wpływającymi na każdą udaną i popularną aplikację internetową. Chociaż istnieje kilka technik i strategii, które pomagają przyspieszyć nowoczesne aplikacje internetowe, wykonywanie buforowania okazało się znacznie bardziej wartościowe.
każde zapytanie do konkretnej strony w Twojej witrynie bezpośrednio komunikuje się i otrzymuje odpowiedzi z twojego serwera. Tak więc za każdym razem, gdy użytkownik odwiedza określoną stronę, Twój front-end wykonuje połączenie HTTP w celu pobrania odpowiedniej zawartości, a twój serwer jest zobowiązany do odpowiedniej odpowiedzi.
w przypadku aplikacji sieci Web o małej skali może to nie być zbyt wiele, ale gdy aplikacja zacznie się skalować, ogromna liczba żądań do serwera sieci Web stopniowo stanie się zbyt duża do obsługi. Jest to często uważane za niepotrzebne przeciążenie.
serwowanie strony www zajmuje dużo zasobów – zwłaszcza gdy jest generowana dynamicznie jak te tworzone za pomocą PHP. Dlatego w tym samouczku Varnish cache pokażę Ci, jak zwiększyć szybkość aplikacji PHP bez konieczności skalowania w pionie lub poziomie, ale za pomocą lakieru.
co to jest Varnish Cache i dlaczego go używać
Varnish cache to akcelerator aplikacji internetowych znany również jako buforowanie http reverse proxy. Działa bardziej jak pośrednik między twoim klientem (tj. użytkownikiem) a twoim serwerem WWW. Oznacza to, że zamiast Twojego serwera internetowego, aby cały czas bezpośrednio słuchać żądań określonych treści, Varnish weźmie na siebie odpowiedzialność.
gdy żądanie pojawi się po raz pierwszy, Varnish w PHP skieruje je do serwera www w celu uzyskania odpowiedniej odpowiedzi. Ta odpowiedź zostanie buforowana przez Varnish w PHP przed wysłaniem do klienta. Co ciekawe, każde kolejne żądanie takiej treści będzie po prostu wysyłane bezpośrednio z pamięci podręcznej Varnish, a nie bezpośrednio na serwer WWW. Dzięki temu Twoja aplikacja internetowa będzie w stanie zarządzać ogromną liczbą jednoczesnych żądań od kilku użytkowników, ponieważ serwer nie zostanie nawet uruchomiony. Spowoduje to magiczny wzrost wydajności aplikacji.
PHP Varnish używa Varnish Configuration Language (VCL), aby umożliwić modyfikowanie jego zachowania poprzez dodanie logiki do manipulowania żądaniami. Możesz manipulować odpowiedziami wracającymi z serwera www, usuwać pliki cookie lub dodawać nagłówki do odpowiedzi.
Varnish workflow
Get /some-web-page (client) —→ Cache –→ Get /some-web-page (Server) –→ Cache –→ Back to client.

Załóżmy, że pierwsze żądanie strony zajmuje około 200ms.
teraz, po całkowitym buforowaniu zawartości takiej strony, przepływ zmienia się całkowicie i żądanie od klienta na tę samą stronę nie uderzy bezpośrednio na serwer, ponieważ Varnish już go buforował wcześniej. Spójrz na ilustrację poniżej:
GET / some-web-page (client ) -→ Cache (HIT). — > i z powrotem do klienta
kolejne zapytanie do strony 10ms…..
zajebiste prawda?
dlatego chodzi o to, aby zmniejszyć liczbę żądań wysyłanych do serwera zaplecza w jak największym stopniu. To w zamian zwiększy szybkość renderowania strony dla Twojej aplikacji internetowej.
pierwsze kroki z konfiguracją lakieru
teraz, gdy przystąpiłeś do podstawowego wprowadzenia lakieru i jego możliwości buforowania, nadszedł czas, aby skonfigurować lakier i użyć go do aplikacji PHP. Rozpoczęcie pracy z lakierem jest łatwe. Aby poprawnie skonfigurować, użyjemy i pobierzemy istniejącą aplikację z GitHub i wdrożymy ją na serwerze DigitalOcean. Następnie skonfigurujemy lakier.
następnie załóż bezpłatne konto na DigitalOcean, a po jego zakończeniu kliknij przycisk „Utwórz”, a z rozwijanej listy wybierz „krople”, aby utworzyć nową kroplę.
przewiń w dół, aby wybrać Ubuntu 16.04 i zauważ, że powinieneś wybrać rozmiar kropli, najmniejszy rozmiar powinien wystarczyć dla tego samouczka Varnish cache.
przewiń w dół, aby dodać klucz SSH, jeśli go posiadasz. Pomoże Ci to w łatwym zalogowaniu się na serwer później, w przeciwnym razie będziesz musiał sprawdzić skrzynkę odbiorczą pod kątem domyślnego hasła do kropli. Następnie dodaj nazwę hosta. Nazwałem swój lakier-demo. Teraz kliknij Utwórz, aby rozpocząć tworzenie kropli.
po zakończeniu procesu zobaczysz nową kroplę na liście kropel. Śmiało i dodaj SSH do kropli za pomocą adresu IP.



przygotuj się na aktualizację podstawowych witryn internetowych
Ebook, aby przyspieszyć swoją witrynę, zanim zaczniesz tracić ruch.
Dziękuję
Twoja lista jest na drodze do Twojej skrzynki odbiorczej.
Zainstaluj serwer WWW Nginx
możesz teraz zaktualizować listę pakietów i zainstalować Nginx. Uruchom następujące polecenie, aby to wykonać:
sudo apt updatesudo apt install -y nginx
- Uwaga: – flaga y ma odpowiadać domyślną odpowiedzią na każde pytanie zadane podczas instalacji
w Ubuntu 16.04 Nginx jest wstępnie skonfigurowany, aby rozpocząć działanie po instalacji, więc po zakończeniu instalacji możesz odwiedzić adres IP swojej kropli w przeglądarce:
http://server_domain_or_ip
ściągnij demo z Githuba
użyję Git do ściągnięcia przykładowego projektu z Githuba, jest on preinstalowany z Ubuntu 16.04. Aby sprawdzić, czy jest już zainstalowany na twoim serwerze, użyj poniższego polecenia:
git -v
Jeśli pojawi się komunikat, że Git nie jest domyślnie zainstalowany, będziesz musiał uruchomić następujące polecenie, aby go zainstalować:
apt install -y git
następnie musisz użyć tego samego folderu, w którym znajduje się Domyślna strona serwera WWW Nginx, więc przejdź do katalogu publicznego:
CD /var/www
Usuń folder html, utwórz go i przenieś do niego:
rm -rf htmlmkdir htmlcd html
teraz Sklonuj repozytorium
// Install projectgit clone https://github.com/yemiwebby/varnish-demo.git
dzięki temu masz teraz przykładowy projekt zainstalowany na serwerze. Ale na razie nie będzie dostępny, a to dlatego, że nie zainstalowaliśmy PHP. Zróbmy to.
Możesz również polubić: używanie Memcached z PHP
instalacja PHP i konfiguracja Nginx do korzystania z procesora PHP
Nginx nie zawiera natywnego przetwarzania PHP, jak niektóre inne serwery internetowe. Zainstalujemy oprogramowanie o nazwie php-fpm i poinstruujemy Nginx, aby przekazał do niego wszystkie żądania PHP. Przejdź z powrotem do katalogu głównego serwera WWW i uruchom następujące polecenie, aby zainstalować moduł PHP-FPM:
$ cd ~$ sudo apt install php-fpm
po zakończeniu procesu instalacji możesz skonfigurować Nginx tak, aby korzystał z zainstalowanego procesora PHP. Otwórz domyślny plik konfiguracyjny bloku serwera Nginx za pomocą:
sudo nano /etc/nginx/sites-available/default
i zastąpić jego zawartość:
server { listen 80 default_server; listen :80 default_server; root /var/www/html; index index.php; server_name YOUR_SERVER_IP; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; } location ~ /\.ht { deny all; }}
gdy skończysz, przeładuj Nginx, aby wprowadzić niezbędne zmiany:
$ sudo systemctl reload nginx
teraz możesz odwiedzić stronę na swoim ulubionym serwerze internetowym, używając adresu IP kropli:
http://ip_address
włączenie buforowania za pomocą Varnish
jeśli sprawdzisz stronę, aby wyświetlić nagłówki HTTP z karty sieć, nie zauważysz żadnych śladów lakieru, ponieważ nie jest zainstalowany ani skonfigurowany do obsługi żadnego żądania. Zmieńmy to instalując Varnish na naszym serwerze WWW. Aby to zrobić, wpisz następujące polecenie:
$ sudo apt install -y varnish
przejdzie to przez proces instalacji pamięci podręcznej Varnish na twoim serwerze. Po zakończeniu instalacji Uruchom i włącz lakier z:
systemctl start varnishsystemctl enable varnish
lakier domyślnie nasłuchuje na porcie 6081. Aby to potwierdzić, otwórz przeglądarkę i ponownie odwiedź swój adres IP kropli, ale tym razem upewnij się, że dodałeś:6081 jak pokazano poniżej:
Nginx, który jest serwerem internetowym odpowiedzialnym za ładowanie zawartości Twojej aplikacji internetowej, działa na porcie 80. Aby umożliwić Varnish przejęcie odpowiedzialności za buforowanie i renderowanie strony tak szybko, jak to możliwe, musi ona znajdować się pomiędzy klientem aplikacji internetowej a serwerem. Zapewni to, że każde żądanie do twojego serwera, które w większości będzie na porcie 80, zostanie przechwycone przez Varnish i w zależności od tego, czy jest to trafienie w cache, czy pominięcie, Varnish zareaguje na nie odpowiednio i zwróci odpowiednią odpowiedź.
zmienię proces konfigurując Varnish na porcie 80 i Nginx na porcie 8080. Aby to zrobić, ponownie Edytuj plik konfiguracyjny nginx swojej witryny. W naszym przypadku ten plik to / etc/nginx/sites-available / default. Zmień 80 na 8080:
server { listen 8080 default_server; listen :8080 default_server; root /var/www/html;}
Port 80 będzie teraz wolny do użycia dla lakieru. Przeładuj konfigurację Nginx za pomocą:
sudo systemctl reload nginx
i sprawdź dostępność swojej witryny za pomocą adresu IP z dołączonym portem 8080:
gdy wcześniej zainstalowano Varnish, na serwerze utworzono również dwa pliki konfiguracyjne. Są to:
- /etc/default/varnish
- /etc/varnish / default.vcl
użyję tych plików do konfiguracji, takich jak otwieranie portu dla lakieru i manipulowanie żądaniami. Teraz otwórz ten plik / etc / default / varnish:
sudo nano /etc/default/varnish
# Nasłuchuj na porcie 6081, Administracja na localhost:6082, a następnie do
# jeden serwer zawartości wybrany przez plik vcl, na podstawie żądania.
DAEMON_OPTS=” – a :6081 \
-t localhost:6082 \
-f / etc / varnish / default.vcl \
-s /etc/varnish/secret \
-s malloc,256m”
poszukaj linii powyżej i zmień-a: 6081 na-a: 80.
następnie otwórz plik /etc / varnish / default.vcl:
sudo nano /etc/varnish/default.vcl
i sprawdź, czy domyślny backend jest ustawiony na port 8080, ponieważ to tam serwuje Nginx od teraz. Poszukaj linii poniżej i upewnij się, że .port to 8080.
# domyślna definicja zaplecza. Ustaw tak, aby wskazywał na serwer treści.
backend default { .host = "127.0.0.1"; .port = "8080"; }
następną rzeczą jest skopiowanie lakieru.plik usługi do naszego katalogu systemd. Umożliwi to systemd uruchomienie lakieru na porcie 80. Uruchom poniższe polecenie:
$ sudo cp /lib/systemd/system/varnish.service /etc/systemd/system/
spowoduje to skopiowanie pliku usługi lakieru.
następnie otwórz:
$ sudo nano /etc/systemd/system/varnish.service
i poszukaj linii ExecStart:
Description=Varnish HTTP acceleratorDocumentation=https://www.varnish-cache.org/docs/4.1/ man:varnishdType=simpleLimitNOFILE=131072LimitMEMLOCK=82000ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :6081 -T localhost:6082 -f /etc/varnish/default.v$ExecReload=/usr/share/varnish/reload-vclProtectSystem=fullProtectHome=truePrivateTmp=truePrivateDevices=trueWantedBy=multi-user.target//ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :6081 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m
teraz zmień-F – a: 6081 na-F-a: 80. Zapisz i zamknij plik.
jeśli sprawdzisz statystyki sieci za pomocą polecenia netstat:
:~# netstat -plntu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:6081 0.0.0.0:* LISTEN 13257/varnishd
tcp 0 0 127.0.0.1:6082 0.0.0.0:* LISTEN 13257/varnishd
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 2440/nginx -g daemo
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1648/sshd
tcp6 0 0 :::6081 :::* LISTEN 13257/varnishd
tcp6 0 0 :::8080 :::* LISTEN 2440/nginx -g daemo
tcp6 0 0 :::22 :::* LISTEN 1648/SSHD
zauważysz, że pamięć podręczna Varnish nadal działa na porcie 6081. Zmień to poprzez ponowne uruchomienie lakieru:
systemctl daemon-reloadsystemctl restart varnish
a także zrestartuj Nginx.
sudo service nginx restart
w tym momencie, jeśli odwiedzisz adres IP swojej strony internetowej, zauważysz, że strona nadal działa idealnie, ale sprawdzenie nagłówka HTTP wskaże, że lakier jest zainstalowany i uruchomiony.
Może Ci Się Spodobać: Zintegruj PHP Opcache & spraw, aby Twoja aplikacja wygrywała z wydajnością
przegląd wewnętrznego lakieru
lakier uruchamia kilka procedur podczas zakończenia przetwarzania zawartości buforowania aplikacji internetowej. Rzućmy okiem na niektóre z najważniejszych procedur i co każdy z nich robi, aby zapewnić, że treści są dostarczane z prędkością światła, co z kolei poprawi wydajność aplikacji internetowej:
- sub vcl_recv {}: jest to pierwsza linia, którą lakier trafi w momencie, gdy twój klient zaakceptuje żądanie.
- sub vcl_backend_response {}: to wywołanie zwrotne jest wywoływane po odpowiedzi i zostało pobrane z serwera zaplecza. Możesz również wprowadzić modyfikacje w odpowiedzi tutaj w tym bloku.
- sub vcl_backend_fetch {}:
- sub vcl_deliver {}: jest to ostatnia procedura, która zostanie wykonana przez VCL przed wysłaniem odpowiedzi do klienta. Tutaj możesz łatwo zrobić pewne sprzątanie, takie jak usuwanie tego, czego nie chcesz, aby Klient widział i tak dalej.
P: Jak wyczyścić pamięć podręczną lakieru?
A: Możesz wyczyścić całą pamięć podręczną lakieru z wiersza poleceń za pomocą polecenia ban:
varnishadm „ban.url .”#Pasuje do wszystkich adresów URL
możesz również banować poszczególne bufory, opisując nazwę hosta:
varnishadm ” ban req .http.host == xxx.com ”
P: Jak wyłączyć pamięć podręczną lakieru?
A :możesz łatwo wyłączyć lakier ze swojej strony internetowej, edytując .plik htaccess z następującym kodem:
nagłówek dodaj „Cache-Control „”no-cache”
spowoduje to tymczasowe wyłączenie lakieru z twojej witryny. Możesz później włączyć lakier, usuwając następujący kod.
Q: Jak wyczyścić pamięć podręczną lakieru za pomocą CLI?
A :możesz wyczyścić lub wyczyścić pamięć podręczną lakieru, po prostu ponownie uruchamiając usługę lakieru. Spowoduje to wyczyszczenie całego bufora lakieru, ponieważ jest on domyślnie przechowywany w pamięci:
/etc/varnish restart
lub
service varnish restart
P: Jak sprawdzić, czy bufor lakieru działa, czy nie?
A: aby sprawdzić, czy Twoja usługa lakiernicza działa prawidłowo, użyj nagłówka X-Varnish, który informuje o aktywnym / nieaktywnym stanie Usługi. Aby dokładniej sprawdzić, czy uderza w pamięć podręczną, użyj nagłówka X-Cache, aby uzyskać pełną analizę pamięci podręcznych.
P: Varnish cache vs Memcached: który jest lepszy?
A: oba Memcached są przydatne w konkretnych domenach buforowania, jednak istnieją pewne różnice między nimi.
możesz używać Memcached jako rozproszonego zaplecza w pamięci do buforowania zasobów aplikacji.
podczas gdy Varnish jest używany jako odwrotne proxy do zewnętrznych buforowania żądań HTTP aplikacji.
Memcached może być określany jako system buforowania ogólnego przeznaczenia, ponieważ buforuje wyniki z bazy danych i wymaga niewielkich zmian w metodzie GET.
natomiast Varnish działa za serwerem WWW, buforuje strony WWW i nie wymaga zmian w kodzie.
Ostatnie słowa
w tym poście ledwo zarysowałem powierzchnię tego, co można zrobić z lakierem. Jest tak potężny, że możesz z nim zrobić o wiele więcej. Oprócz możliwości buforowania zawartości aplikacji internetowej i obsługi żądań, Varnish cache może być również używany jako load balancer i wiele więcej.
Sprawdź oficjalną dokumentację tutaj, aby dowiedzieć się więcej o lakierze i innych niesamowitych konfiguracjach, które można wykonać za jego pomocą. Możesz zostawić komentarz, pytanie lub sugestię w sekcji komentarzy poniżej.
Udostępnij ten artykuł
Opinia klienta na
„Cloudways hosting ma jedną z najlepszych prędkości obsługi klienta i hostingu”
Sanjit C
Olususi K Oluyemi
entuzjasta technologii, pasjonat programowania i uzależniony od tworzenia stron internetowych, który uwielbia nowe technologie.