encyklopedia.space

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) w php.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
    

Patrz także