Tryby PHP na VPS: mod_php vs FastCGI vs PHP-FPM — Kompletny Przewodnik
PHP napędza ponad 80% wszystkich stron internetowych, jednak jedna z najczęściej pomijanych decyzji dotyczących wydajności to wybór odpowiedniego trybu wykonywania PHP. Wybranie złego trybu skutkuje powolnymi czasami ładowania, nadmiernym zużyciem RAM-u i awariami serwera podczas skoków ruchu. Wybranie właściwego trybu pozwala aplikacji skalować się bez wysiłku, nawet pod dużym obciążeniem współbieżnym.
Ten przewodnik omawia wszystkie trzy główne tryby wykonywania PHP — mod_php, FastCGI i PHP-FPM — z rzeczywistym kontekstem wydajności, przykładami konfiguracji i jasnymi rekomendacjami dla różnych przypadków użycia. Niezależnie od tego, czy prowadzisz osobisty blog czy platformę e-commerce o wysokim ruchu, zrozumienie tych trybów jest fundamentalne dla maksymalnego wykorzystania środowiska serwera.
Spis treści
- Czym są tryby wykonywania PHP?
- mod_php — klasyczny moduł Apache
- FastCGI — oddzielenie PHP od serwera WWW
- PHP-FPM — nowoczesny standard wysokiej wydajności
- Porównanie obok siebie
- Jak skonfigurować PHP-FPM na VPS (Ubuntu/Debian)
- PHP-FPM z Nginx
- PHP-FPM z Apache
- Dostrajanie puli PHP-FPM do produkcji
- Który tryb PHP wybrać?
- Podsumowanie
Czym są tryby wykonywania PHP? {#what-are-php-execution-modes}
Tryb wykonywania PHP określa, jak serwer WWW interpretuje i uruchamia skrypty PHP. Określa relację między procesem serwera WWW (Apache, Nginx, LiteSpeed) a interpreterem PHP — konkretnie, czy współdzielą ten sam proces, komunikują się za pośrednictwem protokołu, czy działają jako całkowicie oddzielne usługi zarządzane.
Trzy główne tryby to:
| Tryb | Architektura | Najlepsze dla |
|---|---|---|
| mod_php | PHP osadzony w Apache | Proste środowiska współdzielone |
| FastCGI | PHP jako oddzielny proces | Witryny o średnim ruchu |
| PHP-FPM | Zarządzane pule procesów PHP | Aplikacje produkcyjne o wysokim ruchu |
Wybór właściwego trybu bezpośrednio wpływa na użycie pamięci, przepustowość żądań, izolację i skalowalność. W środowisku VPS Hosting, gdzie zasoby są dedykowane i konfigurowalne, masz pełną swobodę wdrożenia dowolnego trybu, który najlepiej pasuje do Twojego obciążenia.
mod_php — klasyczny moduł Apache {#mod_php}
Czym jest mod_php?
mod_php to moduł Apache, który osadza interpreter PHP bezpośrednio w procesie serwera WWW Apache. Jest to najstarsza i historycznie najczęstsza metoda uruchamiania PHP.
Jak działa mod_php
Gdy Apache otrzyma żądanie dla pliku PHP, obsługuje wykonanie wewnętrznie — żaden proces zewnętrzny nie jest uruchamiany, nie dochodzi do komunikacji przez gniazdo. PHP żyje wewnątrz samego Apache.
Charakterystyka wydajności
Dla witryn o niskim ruchu i środowisk programistycznych mod_php działa wystarczająco dobrze. Ponieważ PHP jest już załadowany do pamięci Apache, nie ma narzutu spawania procesów na żądanie.
Jednak ta architektura ma krytyczną wadę: każdy proces roboczy Apache zawiera pełny interpreter PHP w pamięci, niezależnie od tego, czy obsługuje plik PHP czy statyczny zasób, taki jak obraz lub plik CSS.
Wady mod_php
- Wysokie zużycie pamięci: Każdy proces roboczy Apache (nawet te obsługujące pliki statyczne) przechowuje pełne środowisko uruchomieniowe PHP w RAM-ie.
- Brak izolacji między witrynami: Wszystkie hosty wirtualne współdzielą ten sam proces PHP i kontekst użytkownika, co stanowi zagrożenie bezpieczeństwa na serwerach wielodostępnych.
- Ograniczona elastyczność konfiguracji: Nie możesz uruchamiać różnych wersji PHP dla różnych hostów wirtualnych bez znaczących obejść.
- Niezgodny z Nginx: mod_php jest wyłączny dla Apache; nie można go używać z Nginx lub LiteSpeed.
- Słaba skalowalność pod obciążeniem: Przy wysokiej współbieżności wyczerpanie pamięci staje się rzeczywistym zagrożeniem.
Kiedy używać mod_php
- Lokalne środowiska programistyczne
- Bardzo niskoruchu osobiste witryny
- Starsze aplikacje, gdzie rekonfiguracja nie jest możliwa
FastCGI — oddzielenie PHP od serwera WWW {#fastcgi}
Czym jest FastCGI?
FastCGI to protokół, który pozwala serwerowi WWW komunikować się z zewnętrznym procesem PHP, zamiast osadzać PHP wewnątrz siebie. Jest to znaczna poprawa architektoniczna w stosunku do mod_php.
Jak działa FastCGI
Serwer WWW (Apache lub Nginx) przekazuje żądania PHP do trwałego procesu FastCGI za pośrednictwem gniazda Unix lub portu TCP. Proces PHP obsługuje wykonanie i zwraca wynik.
Kluczowe słowo tutaj to trwały: w przeciwieństwie do CGI (oryginalnego protokołu), procesy FastCGI pozostają aktywne między żądaniami, eliminując narzut spawania nowego procesu dla każdego pojedynczego żądania.
Charakterystyka wydajności
FastCGI znacznie zmniejsza narzut pamięci w porównaniu z mod_php, ponieważ żądania plików statycznych są obsługiwane całkowicie przez serwer WWW bez zaangażowania PHP. Procesy PHP są wywoływane tylko wtedy, gdy są rzeczywiście potrzebne.
Wady FastCGI
- Złożoność konfiguracji: Wymaga dodatkowej konfiguracji w porównaniu z mod_php, w tym konfiguracji gniazda lub portu.
- Ograniczone zarządzanie procesami: Podstawowy FastCGI brakuje zaawansowanych funkcji zarządzania pulą potrzebnych w środowiskach produkcyjnych.
- Zastąpiony przez PHP-FPM: W większości nowoczesnych wdrożeń PHP-FPM (zbudowany na FastCGI) jest preferowany zamiast podstawowych implementacji FastCGI.
Kiedy używać FastCGI
- Witryny o średnim ruchu
- Środowiska, gdzie PHP-FPM nie jest dostępny
- Przejściowe konfiguracje migrujące z mod_php
PHP-FPM — nowoczesny standard wysokiej wydajności {#php-fpm}
Czym jest PHP-FPM?
PHP-FPM (FastCGI Process Manager) to zaawansowana, bogata w funkcje implementacja protokołu FastCGI. Jest to de facto standard uruchamiania PHP w środowiskach produkcyjnych i jest zalecanym trybem dla każdej poważnej aplikacji internetowej.
Jak działa PHP-FPM
PHP-FPM zarządza pulą procesów roboczych PHP. Serwer WWW przekazuje żądania PHP do PHP-FPM za pośrednictwem gniazda Unix lub połączenia TCP. PHP-FPM dynamicznie zarządza liczbą aktywnych procesów roboczych na podstawie bieżącego ruchu, uruchamiając nowych pracowników pod obciążeniem i zwalniając ich w okresach spokojnych.
Kluczowe zalety PHP-FPM
#### 1. Dynamiczne zarządzanie procesami
PHP-FPM obsługuje wiele strategii zarządzania procesami:
- static: Stała liczba procesów roboczych (przewidywalna, dobra dla wysokiego ruchu)
- dynamic: Pracownicy skalują się między minimum a maksimum na podstawie popytu
- ondemand: Pracownicy są uruchamiani tylko wtedy, gdy przychodzą żądania (efektywne pamięciowo dla niskiego ruchu)
#### 2. Konfiguracja dla każdej puli
Każda aplikacja lub host wirtualny może mieć własną pulę PHP-FPM z niezależnymi ustawieniami:
- Oddzielny użytkownik/grupa Unix (ulepszona izolacja bezpieczeństwa)
- Inna wersja PHP dla każdej puli
- Niestandardowe wartości php.ini dla każdej aplikacji
- Indywidualne limity zasobów
#### 3. Rejestrowanie powolnych żądań
PHP-FPM może rejestrować żądania, które przekraczają zdefiniowany próg czasu wykonania, co jest nieocenione do identyfikowania wąskich gardeł wydajności.
#### 4. Efektywność zasobów
Ponieważ procesy PHP są zarządzane oddzielnie od serwera WWW, zasoby statyczne są obsługiwane bez żadnego narzutu PHP. Pamięć jest zużywana tylko przez aktywnych pracowników PHP.
#### 5. Kompatybilność
PHP-FPM bezproblemowo współpracuje z Nginx, Apache (za pośrednictwem mod_proxy_fcgi) i LiteSpeed. W połączeniu z Nginx lub LiteSpeed zyski wydajności są znaczne — często cytowane jako 5–10x szybciej pod obciążeniem współbieżnym w porównaniu z mod_php z Apache.
Porównanie obok siebie {#comparison}
| Funkcja | mod_php | FastCGI | PHP-FPM |
|---|---|---|---|
| Architektura | Osadzony w Apache | Proces zewnętrzny | Zarządzana pula procesów |
| Efektywność pamięci | Niska | Średnia | Wysoka |
| Narzut plików statycznych | Wysoki | Niski | Niski |
| Obsługa współbieżnych żądań | Słaba | Dobra | Doskonała |
| Wersja PHP dla każdej witryny | Nie | Ograniczona | Tak |
| Izolacja bezpieczeństwa | Słaba | Średnia | Doskonała |
| Kompatybilność z Nginx | Nie | Tak | Tak |
| Złożoność konfiguracji | Niska | Średnia | Średnia |
| Gotowość do produkcji | Nie | Częściowa | Tak |
| Rejestrowanie powolnych żądań | Nie | Nie | Tak |
Jak skonfigurować PHP-FPM na VPS (Ubuntu/Debian) {#setup}
Poniższe instrukcje dotyczą Ubuntu 22.04 LTS i Debian 11/12. Jeśli uruchamiasz aplikację na planie VPS Hosting, będziesz mieć pełny dostęp root do wykonania tych poleceń.
Krok 1: Zaktualizuj system i zainstaluj PHP-FPM
Aby zainstalować konkretną wersję PHP (np. PHP 8.2):
Krok 2: Sprawdź, czy PHP-FPM jest uruchomiony
Powinieneś zobaczyć php-fpm w danych wyjściowych. Jeśli nie, uruchom i włącz go:
Krok 3: Potwierdź ścieżkę gniazda
PHP-FPM komunikuje się za pośrednictwem gniazda Unix. Sprawdź jego lokalizację:
PHP-FPM z Nginx {#nginx}
Nginx jest najczęstszym serwerem WWW sparowanym z PHP-FPM i z dobrego powodu — architektura oparta na zdarzeniach Nginx bez blokowania doskonale uzupełnia model puli procesów PHP-FPM.
Zainstaluj Nginx
Skonfiguruj blok serwera Nginx
Edytuj plik konfiguracji Twojej witryny:
Dodaj następującą konfigurację:
Włącz witrynę i uruchom ponownie Nginx
PHP-FPM z Apache {#apache}
Jeśli wolisz Apache — lub jeśli Twoja aplikacja opiera się na plikach .htaccess — możesz nadal używać PHP-FPM za pośrednictwem modułu mod_proxy_fcgi Apache.
Włącz wymagane moduły Apache
Skonfiguruj host wirtualny Apache
Włącz witrynę i uruchom ponownie Apache
Dostrajanie puli PHP-FPM do produkcji {#tuning}
Domyślna konfiguracja puli PHP-FPM jest konserwatywna i odpowiednia dla programowania. W przypadku obciążeń produkcyjnych powinieneś dostroić ustawienia puli na podstawie dostępnego RAM-u serwera i oczekiwanego ruchu.
Zlokalizuj plik konfiguracji puli
Kluczowe parametry do dostrojenia
Obliczanie max_children
Praktyczna formuła dla środowisk dynamicznych:
Aby znaleźć średni rozmiar procesu PHP:
Na typowej witrynie WordPress każdy pracownik PHP-FPM zużywa około 30–60 MB. Na VPS z 2 GB RAM (pozostawiając ~1,5 GB dla PHP po narzucie systemu operacyjnego) możesz bezpiecznie uruchamiać 25–50 pracowników.
Zastosuj zmiany
Który tryb PHP wybrać? {#which-to-choose}
Oto praktyczny przewodnik decyzyjny:
Wybierz mod_php jeśli:
- Uruchamiasz lokalne środowisko programistyczne
- Masz bardzo prostą, niskoruchu witrynę ze statyczną zawartością
- Jesteś na starszym hostingu współdzielonym bez innych opcji
Wybierz FastCGI jeśli:
- Jesteś na witrynie o średnim ruchu i PHP-FPM jest niedostępny
- Migrujesz z mod_php i potrzebujesz kroku pośredniego
Wybierz PHP-FPM jeśli:
- Uruchamiasz dowolną aplikację produkcyjną
- Musisz obsługiwać wiele wersji PHP na tym samym serwerze
- Uruchamiasz WordPress, Laravel, Symfony, Magento lub dowolny nowoczesny framework PHP
- Chcesz izolacji bezpieczeństwa dla każdej aplikacji
- Używasz Nginx (PHP-FPM jest jedyną realną opcją)
- Potrzebujesz skalowalności pod obciążeniem współbieżnym
W zdecydowanej większości przypadków produkcyjnych PHP-FPM jest wyraźnym zwycięzcą. Jest to standardowa konfiguracja na nowoczesnych platformach hostingowych zarządzanych i to właśnie powinieneś uruchamiać na każdym samodzielnie zarządzanym VPS.
Jeśli zarządzasz wieloma witrynami i chcesz graficzny interfejs do obsługi przełączania trybu PHP, zarządzania pulą procesów i konfiguracji hostów wirtualnych bez ręcznego edytowania plików konfiguracyjnych, rozważ VPS z cPanel — EasyApache 4 cPanel pozwala przełączać procedury obsługi PHP dla każdej domeny za pomocą kilku kliknięć.
Alternatywnie, zapoznaj się z pełnym zakresem paneli sterowania VPS, aby znaleźć interfejs zarządzania, który najlepiej pasuje do Twojego przepływu pracy.
Zabezpieczanie aplikacji PHP poza trybem wykonywania
Wyb
