Sposoby serwowania skryptów PHP przez serwer internetowy

> Dodaj do ulubionych

Należy korzystać z PHP-FPM.

Na serwerze można skonfigurować kilka sposobów serwowania skryptów PHP. Tradycyjna (i okropna) metoda polega na używaniu modułu serwera Apache mod_php. Moduł ten wiąże PHP z samym serwerem Apache, który niestety bardzo źle zarządza tym narzędziem. Przez to, gdy tylko witryna zdobędzie trochę większy ruch, zaczną się problemy z pamięcią.

Dlatego też wielką popularność zdobywają nowe metody: mod_fastcgi i mod_fcgid. Każda z nich polega na utrzymywaniu pewnej liczby działających procesów PHP, a Apache wysyła żądania do tych interfejsów z prośbą o wykonanie skryptów PHP w jego imieniu. Jako że biblioteki te ograniczają liczbę aktywnych procesów PHP, następuje redukcja zużycia pamięci bez negatywnego wpływu na wydajność.

Grupa inteligentnych osób poszła nawet o krok dalej i stworzyła implementację fastcgi specjalnie przystosowaną do jak najlepszej współpracy z PHP. Nazwali swój wynalazek PHP-FPM i stał się on już de facto standardowym rozwiązaniem.

W Apache wprowadzono też nową metodę współpracy z PHP-FPM: mod_proxy_fcgi. Niestety wersja Apache dostępna w systemie Ubuntu 14.04 ma pewne problemy z tym modułem, np. nie ma możliwości korzystania z połączeń gniazdowych, a także występują problemy z mod_rewrite oraz stronami 404 i podobnymi.

Poniższy przykład dotyczy serwera Apache 2.4.7, ale PHP-FPM działa też z innymi serwerami internetowymi, np. Nginx.

Instalowanie PHP-FPM i serwera Apache

W Ubuntu 14.04 PHP-FPM i Apache można zainstalować za pomocą poniższych poleceń terminala:


sudo apt-get install apache2-mpm-event libapache2-mod-fastcgi php5-fpm sudo a2enmod actions alias fastcgi

Zwróć uwagę na konieczność użycia apache2-mpm-event (lub apache2-mpm-worker), a nie apache2-mpm-prefork ani apache2-mpm-threaded.

Następnie należy skonfigurować hosta wirtualnego Apache tak, aby przekazywał żądania PHP do procesu PHP-FPM. Wpisz zatem poniższy kod w pliku konfiguracyjnym serwera Apache (w Ubuntu 14.04 domyślny plik konfiguracyjny to /etc/apache2/sites-available/000-default.conf).

<Directory />
    Require all granted
</Directory>
<VirtualHost *:80>
    Action php5-fcgi /php5-fcgi
    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -idle-timeout 120 -pass-header Authorization
    <FilesMatch "\.php$">
        SetHandler  php5-fcgi
    </FilesMatch>
</VirtualHost>

Na koniec zrestartuj serwer Apache i proces FPM:


sudo service apache2 restart && sudo service php5-fpm restart 

Pułapki

  • Zastąpienie dyrektywy SetHandler dyrektywą AddHandler może być ryzykowne z punktu widzenia bezpieczeństwa. Dyrektywa AddHandler wykonuje kod PHP znajdujący się w plikach mających ciąg znaków .php gdziekolwiek w nazwie. Jeśli więc użytkownik wyśle na serwer plik niszczyciel.php.gif za pomocą formularza ze strony, to możesz przeżyć niemiłe zaskoczenie.

Autor: Alex Cabal

Źródło: http://phpbestpractices.org/

Tłumaczenie: Łukasz Piwko

Treść tej strony jest dostępna na zasadach licencji CC BY-SA 3.0