mod_php
mod_php – moduł serwera Apache umożliwiający bezpośrednie wbudowanie interpretera języka PHP w proces obsługi żądań HTTP. Dzięki temu skrypty PHP są wykonywane w tym samym wątku (lub procesie) co serwer WWW, co znacznie przyspiesza ich uruchamianie w porównaniu z klasycznym modelem CGI.
Historia
Projekt mod_php powstał w 1995 roku jako część pierwszych wersji PHP (wtedy jeszcze PHP/FI). Pierwsza stabilna integracja z serwerem Apache została udostępniona w 1998 roku wraz z wydaniem PHP 3, kiedy to moduł stał się oficjalnym komponentem dystrybucji PHP.
Podstawowe działanie
Moduł rejestruje w Apache własny handler dla plików o rozszerzeniach typowych dla PHP (np. .php, .phtml). Gdy serwer napotyka żądanie takiego zasobu, wywołuje interpreter PHP, przekazując mu:
- zmienne środowiskowe HTTP (np.
$_GET,$_POST), - treść żądania,
- informacje o sesji i ciasteczkach.
Wynik działania skryptu – zazwyczaj kod HTML – jest natychmiast zwracany do klienta.
Konfiguracja
Moduł włącza się w plikach konfiguracyjnych Apache (httpd.conf lub apache2.conf) przy pomocy dyrektywy LoadModule php_module modules/libphp.so. Następnie definiuje się, które katalogi i typy plików mają być obsługiwane przez PHP:
<IfModule php_module>
AddHandler application/x-httpd-php .php .phtml
PHPIniDir "/etc/php/7.4/apache2"
</IfModule>
Ustawienia specyficzne dla PHP (np. memory_limit, max_execution_time) konfiguruje się w plikach php.ini, a nie w konfiguracji Apache.
Wersje i kompatybilność
W ciągu lat mod_php był aktualizowany równolegle z samym językiem PHP:
- PHP 5 – wprowadził wsparcie dla Zend Engine 2 i lepsze zarządzanie pamięcią.
- PHP 7 – znacząco przyspieszył działanie dzięki Zend Engine 3.
- PHP 8 – wprowadził atrybuty i JIT, a mod_php został zaktualizowany do wersji
mod_php 8.x.
Moduł jest dostępny na platformach Linux, Windows, macOS i innych systemach obsługujących Apache.
Zalety
- Szybkość – brak konieczności uruchamiania odrębnego procesu CGI przy każdym żądaniu.
- Prosta instalacja – w większości dystrybucji Linuksa dostępny jako pakiet
libapache2-mod-php. - Pełna integracja – możliwość korzystania z mod_rewrite, mod_ssl i innych modułów Apache w ramach jednego procesu.
Wady i ograniczenia
- Izolacja procesu – wszystkie skrypty działają w kontekście tego samego procesu użytkownika www‑data, co może stwarzać ryzyko bezpieczeństwa przy nieodpowiednio skonfigurowanych skryptów.
- Skalowalność – przy dużym obciążeniu serwera Apache może wymagać dużej liczby wątków/procesów, co zwiększa zużycie pamięci w porównaniu z modelem FastCGI (gdzie interpreter uruchamiany jest w osobnym procesie).
- Brak wsparcia dla nie‑blokujących środowisk – nie nadaje się do aplikacji wymagających asynchronicznego I/O.
Alternatywy
W zależności od wymagań projektowych stosuje się różne rozwiązania:
- CGI – najprostsza, ale najwolniejsza metoda.
- FastCGI (np.
php-fpm) – oddzielny proces interpretera, lepsza izolacja i skalowalność. - mod_perl – analogiczny moduł integrujący język Perl.
- Serwery aplikacji Node.js i Ruby on Rails – całkowicie odrębne środowiska.
Bezpieczeństwo
Podobnie jak każdy komponent serwera WWW, mod_php wymaga regularnych aktualizacji, aby eliminiować luki typu remote code execution i information disclosure. Zaleca się:
- Używanie najnowszej stabilnej wersji PHP oraz Apache.
- Ograniczenie uprawnień użytkownika, pod którym działa serwer (
www-data,apache). - Włączenie mod_security i skonfigurowanie reguł ochronnych.
- Wyłączenie niepotrzebnych funkcji PHP (np.
exec,system) wphp.ini.
Licencja
Moduł mod_php jest dystrybuowany na podstawie licencji GPL (GNU General Public License), co czyni go oprogramowaniem open source.
Przykładowa konfiguracja w systemie Debian/Ubuntu
# instalacja pakietu
sudo apt-get install libapache2-mod-php
# włączenie modułu (zazwyczaj już włączony)
sudo a2enmod php8.2
# restart serwera Apache
sudo systemctl restart apache2