Nie każdą wolną stronę da się przyspieszyć kolejną wtyczką. Czasem problem znajduje się niżej: w sposobie obsługi ruchu pomiędzy serwerem WWW, warstwą SSL, cache i samą aplikacją.
Projekt powstał jako rozszerzenie konfiguracji ISPConfig 3 dla stron opartych na WordPressie i Craft CMS. Jego zadaniem było uporządkowanie przepływu zapytań oraz dodanie warstwy Varnish Cache przed Apache.
Bez dodatkowej warstwy cache każde żądanie może trafiać bezpośrednio do Apache, PHP, bazy danych i systemu CMS. Oznacza to, że aplikacja ponownie generuje odpowiedź nawet wtedy, gdy treść strony nie zmieniła się od poprzedniego wywołania.
Varnish pozwala przechować gotową odpowiedź w pamięci i zwrócić ją bez ponownego uruchamiania całego backendu. Zmniejsza to liczbę żądań obsługiwanych przez Apache i aplikację, ale wymaga poprawnego połączenia z HTTPS, mechanizmami czyszczenia cache oraz panelem ISPConfig.
Problemem nie było więc samo uruchomienie Varnisha. Chodziło o przygotowanie konfiguracji, która będzie przewidywalna, możliwa do aktualizowania i zgodna z istniejącym środowiskiem serwerowym.
Zaprojektowałem architekturę przepływu ruchu, przygotowałem konfigurację Nginxa, Varnisha i Apache oraz szablony hostów wykorzystywane przez ISPConfig 3.
Odpowiadałem również za wdrożenia serwerowe, integrację mechanizmów czyszczenia cache oraz dostosowanie konfiguracji do stron działających na WordPressie i Craft CMS.
Kod został udostępniony publicznie, aby konfigurację można było wdrażać i aktualizować bez ręcznego odtwarzania wszystkich zmian na kolejnych serwerach.
W przypadku ruchu HTTPS zapytanie przechodzi przez kilka oddzielnych warstw:
Internet
→ Nginx SSL Termination :443
→ Varnish Cache localhost:7443
→ Apache
→ WordPress lub Craft CMS
Nginx obsługuje połączenie HTTPS i terminację SSL. Następnie przekazuje żądanie do Varnisha, który sprawdza, czy odpowiedź może zostać zwrócona z pamięci podręcznej.
Jeżeli odpowiednia wersja strony znajduje się już w cache, Varnish zwraca ją bez uruchamiania aplikacji. Gdy odpowiedzi brakuje albo żądanie nie powinno być buforowane, ruch trafia do Apache, PHP i systemu CMS.
Dla ruchu bez SSL schemat jest krótszy:
Internet
→ Varnish Cache :80
→ Apache
→ WordPress lub Craft CMS
Każda warstwa ma jedno konkretne zadanie. Nginx obsługuje HTTPS i kompresję, Varnish pamięć podręczną, Apache aplikację, a WordPress lub Craft CMS generowanie treści.
Projekt obejmuje:
Cache przyspiesza obsługę strony tylko wtedy, gdy można go poprawnie unieważnić.
Po opublikowaniu lub edycji treści nieaktualna odpowiedź nie powinna pozostawać w Varnishu do ręcznego usunięcia. Dlatego konfiguracja została połączona z mechanizmami czyszczenia cache działającymi po stronie WordPressa i Craft CMS.
W zależności od aplikacji wykorzystywane są integracje z WP Rocket, Proxy Cache Purge albo CDN Cache & Preload. Pozwala to odświeżyć pamięć podręczną po zmianie treści bez czyszczenia całego środowiska przy każdej aktualizacji.
Wydajność strony nie kończy się na wyniku jednego testu. Znaczenie ma również zachowanie serwera przy większej liczbie zapytań, poprawna obsługa HTTPS, przewidywalne czyszczenie cache i możliwość dalszego rozwijania konfiguracji.
W tym projekcie Varnish nie został dodany jako odizolowana usługa. Został połączony z Nginxem, Apache, ISPConfig, aplikacją i mechanizmami aktualizacji treści.
Dzięki temu konfiguracja nie opiera się na pojedynczym ręcznym obejściu, które przestaje działać po kolejnej zmianie hosta albo aktualizacji panelu.
Poprawność działania takiej konfiguracji należy sprawdzać na kilku poziomach:
Podstawową diagnostykę można wykonać za pomocą nagłówków HTTP:
curl -I https://example.com/
W zależności od konfiguracji warto sprawdzić między innymi:
Age
Cache-Control
Via
X-Cache
X-Cache-Hits
Dokładne nazwy nagłówków zależą od zastosowanego pliku VCL i konfiguracji Nginxa.
Varnish nie rozwiązuje każdego problemu z wydajnością.
Jeżeli przyczyną wolnego działania są ciężkie zapytania do bazy danych, błędy PHP, zewnętrzne API albo skrypty wykonywane w przeglądarce, cache może jedynie ograniczyć część obciążenia. Nie usuwa źródła problemu.
Konfiguracja wymaga również poprawnych reguł dla treści dynamicznych, zalogowanych użytkowników, panelu administracyjnego i stron zależnych od cookies. Błędne ustawienia mogą prowadzić do wyświetlania nieaktualnej albo nieprawidłowej wersji strony.

Opis grafiki: przepływ ruchu HTTPS w środowisku ISPConfig 3: Internet → Nginx SSL → Varnish Cache → Apache → WordPress lub Craft CMS.
ISPConfig 3, Debian Linux, Nginx, Varnish Cache, Apache, WordPress, Craft CMS, Cloudflare, WP Rocket, Gzip i Brotli.
Kod projektu oraz instrukcja wdrożenia są dostępne publicznie na GitHubie:
Zobacz repozytorium Varnish Cache dla ISPConfig 3
Projekt open source. Aktualny status utrzymania oraz obsługiwane środowiska są opisane w repozytorium.
Gdy problem nie kończy się na jednej wtyczce, sprawdzam cały przepływ: kod aplikacji, bazę danych, cache, integracje, PHP oraz konfigurację serwera.
Opisz obecne środowisko i sposób działania strony. Na tej podstawie można ustalić, czy wąskie gardło znajduje się w aplikacji, cache, bazie danych czy warstwie serwerowej.