Z pierwszej części naszego przewodnika dowiedziałeś się, jak uruchomić serwer WWW. W tym artykule dodamy do Apache2 możliwość obsługi skryptów PHP.
Jeśli nie masz jeszcze zainstalowanego serwera Apache2, rozpocznij lekturę od pierwszej części artykułu: http://www.internetmaker.pl/artykul/4617,1,apache_jak_zainstalowac_i_skonfigurowac_serwer_www_.html. Ten artykuł stanowi jego kontynuację.
Zaznaczamy, że wszystkie polecenia i lokalizacje plików konfiguracyjnych są podane w sposób właściwy dla systemu Debian Etch. Jeśli korzystasz z innej dystrybucji, będziesz musiał je nieco zmienić – zasada działania i sposób konfiguracji zarówno serwera Apache2, jak i PHP, są wszędzie takie same. Różnić mogą się niektóre polecenia wykorzystywane w procesie instalacyjnym, jak również nazwy folderów i plików konfiguracyjnych.
Instalacji PHP można dokonać w jednym z dwóch najpopularniejszych trybów:
- mod_php – jest to instalacja jako moduł serwera Apache. Ponieważ implementacja obsługi skryptów PHP jest tutaj umiejscowiona w samym serwerze, ich uruchamianie jest dla serwera czymś tak naturalnym, jak obsługa zwykłego pliku HTML czy wstawek Server Side Includes (nieczęsto już dziś stosowanych).
- CGI – skrypt może być uruchomiony poprzez nadanie mu atrybutu wykonywalności i wykonanie jako standardowego skryptu CGI. Taki skrypt zostanie wykonany przez program wskazany w pierwszej linii interpretera (w naszym przypadku będzie to PHP). Na standardowe wejście zostaną przekazane pewne dane związane z charakterem zapytania, natomiast ze standardowego wyjścia serwer będzie odczytywać odpowiedź, którą wyśle do przeglądarki (uwaga, serwer czeka również na nagłówek wskazujący typ danych!).
- Fast CGI (rozwinięcie CGI). Specjalnie przygotowany serwer FastCGI (a właściwie to prosta namiastka serwera) oczekuje na zapytania przekazane od Apache, jest on jednak od niego samego niezależny. Mechanizm FastCGI zakłada, że jest niejako \”trzymana w gotowości\” odpowiednia ilość podprocesów, które będą wykonywać skrypt. To odróżnia go od standardowego CGI, gdzie osobne procesy były tworzone dla każdego zapytania osobno (co powodowało spory spadek szybkości działania mechanizmu).
Wady i zalety rozwiązań
Zaletą mod_php jest szybkość. Rozwiązanie plasuje się zwykle na szczycie testów wydajnościowych. Nic dziwnego, kod silnika PHP jest tu niejako dołączany do serwera. Tu nie ma żadnych dodatkowych opóźnień.
Jednak odbywa się to kosztem bezpieczeństwa. Ponieważ kod PHP jest zaszyty w kod serwera, to jakikolwiek błąd w tym module wpływa bezpośrednio na bezpieczeństwo i stabilność całego serwera WWW. To niemal dyskwalifikuje użycie mod_php w środowiskach współdzielonych, gdzie pracuje wielu różnych użytkowników. Nawet przy zastosowanie dodatkowych mechanizmów wpływających pozytywnie na bezpieczeństwo, nie likwiduje to wszystkich problemów.
Tych wad nie posiada technologia FastCGI, ponieważ nie jest ona związana bezpośrednio z serwerem Apache. Skrypty są wykonywane jako osobny procesy, więc błędy i luki nie będą mieć wpływu na macierzysty proces serwera. Ponadto w przeciwieństwie do zwykłego CGI, tryb FastCGI nie jest dużo wolniejszy od mod_php (niektóre benchmarki wskazują porównywalne rezultaty dla obu mechanizmów). Jedyna wada tego rozwiązania to ograniczenia wynikające z ilości dostępnej pamięci RAM. Pewna ilość procesów FastCGI jest stale uruchomiona, nawet jeśli w danej chwili nie ma nic do roboty. Oznacza to stałe blokowanie w systemie pamięci RAM wykorzystywanej przez te procesy.
Niekiedy uciążliwe może być również to, że FastCGI nie korzysta z API serwera Apache, co oznacza brak dostępu do pewnych rzadziej stosowanych funkcji i zachowań PHP. Jednak do tych funkcji, które dostępne są jedynie w obrębie mod_php, sięga się dość rzadko.
Wybór rozwiązania
W naszym przykładzie ostatecznie postawiliśmy na mod_php. Dlaczego? Jego konfiguracja jest szybsza i bardziej bezproblemowa. Niniejszy artykuł adresowany jest do tych czytelników, którzy chcieliby uruchomić serwer WWW na własnym serwerze lub własnym VPS – będzie to więc serwer przeznaczony dla własnych potrzeb, nie udostępniany innym użytkownikom.
To z kolei oznacza, że nikt postronny nie będzie próbować przełamywać zabezpieczeń \”od środka\” serwera, co dla mod_php jest najbardziej niebezpieczne. Wybór tego trybu wydaje się więc wystarczający. Gdybyś jednak chciał zmienić zdanie, zainteresuj się dostępnym w systemie Debian pakietem libapache2-mod-fastcgi .
Instalacja modułu
Przed przystąpieniem do właściwych działań, warto zaktualizować bazę danych repozytoriów:
aptitude update
Pamiętaj, aby wszystkie polecenia wykonywać z poziomu użytkownika root. Aby doinstalować mod_php do serwera Apache, wykonaj z linii poleceń:
aptitude install libapache2-mod-php5
System zasugeruje automatyczne doinstalowanie pewnych pakietów towarzyszących powyższemu (związanych z nim). Jeśli program poprosi o potwierdzenie pobrania pakietów z internetu, potwierdź.
Dla poprawnego działania części skryptów PHP będziesz potrzebować doinstalowania pewnych bibibliotek. Wejdź do programu zarządzającego pakietami:
aptitude
Po jego załadowaniu wciśnij klawisz \”L\” (małe), aby przejść do trybu filtrowania. W okno dialogowe wpisz \”php5-\”. Spowoduje to ograniczenie listy pakietów do tych, które zawierają biblioteki PHP (oraz kilka innych mniej przydatnych, które pominiemy).
Przejdź do drzewa z nie zainstalowanymi pakietami, rozwiń drzewo \”web\”. Wybierz te biblioteki, które mogą ci się przydać. Możesz zainstalować od razu wszystkie albo doinstalować w miarę potrzeby te, które będą ci potrzebne. Z punktu widzenia bezpieczeństwa lepsze jest to drugie podejście.
Zaznaczenie do instalacji dokonujesz poprzez wciśnięcie klawisza \”+\” na wskazanym kursorem pakiecie. Rozpoczęcie instalacji dokonujesz poprzez dwukrotne wciśnięcie klawisza \”G\” (małego).
Moduł powinien zostać przez instalator włączony automatycznie, jednak dla pewności wydaj polecenie:
ln -s /etc/apache2/mods-available/php5.conf /etc/apache2/mods-enabled/php5.conf
ln -s /etc/apache2/mods-available/php5.load /etc/apache2/mods-enabled/php5.load
Jeśli wystąpią błędy typu \”plik już istnieje\”, zignoruj je. Oznacza to tylko tyle, że instalator wykonał już tę operację za ciebie.
Konfiguracja PHP
Po instalacji czas na edycję pliku php.ini, który jest sercem konfiguracji PHP. Otwórz swoim ulubionym edytorem plik:
/etc/php5/apache2/php.ini
Znajdziesz tutaj wiele ustawień. Wspomnimy o kilku kluczowych:
- max_execution_time – w tym miejscu ustawiasz maksymalny czas wykonywania skryptu. Po jego przekroczeniu, skrypt nie będzie dłużej wykonywany. Domyślnie jest to 30 sekund, ale jeśli planujesz wykonywać bardziej skomplikowane operacje, wpisz większą wartość. Pamiętaj jednak, że ten kij ma dwa końce – dłużej wykonywane skrypty to większe obciążenie dla twojego systemu. Wartość sekundowa odnosi się do czasu procesora, czyli tego ile czasu jednostka centralna faktycznie poświęci skryptowi. Nie jest ona równa czasowi zegarowemu.
- memory_limit – limit pamięci, jaki może zużyć pojedynczy skrypt. Jeśli wykonujesz bardziej skomplikowane skrypty, zwłaszcza oparte na dużej liczbie obiektów lub sporej ilości przetwarzanych danych, zwiększ tę wartość. Pamiętaj jednak, że odbije się to na ilości skryptów, jakie będziesz w stanie jednocześnie pomieścić w pamięci RAM.
- register_globals – włączenie tego ustawienia (oznaczenie na \”on\”) spowoduje, że wszelkie parametry wejściowe przekazywane do skryptu będą automatycznie konwertowane do zmiennych globalnych. Dla przykładu przesłanie do skryptu metodą GET parametru \”id=5\” spowoduje, że zostanie stworzona zmienna $id o wartości 5. Jest to bardzo niebezpieczne ustawienie i dlatego należy ustawić register_globals na off. Niestety niektóre starsze skrypty mogą nie współdziałać z takim ustawieniem.
- upload_max_filesize – jeśli zamierzasz obsługiwać upload dużych plików, może być konieczna korekta ustawienia wartości upload_max_filesize. Definiuje ona maksymalną wielkość pliku, jaki można przesłać z przeglądarki do skryptu (domyślnie 2 MB).
- post_max_size – wartość post_max_size jest powiązana z poprzednią i również odnosi się do danych uploadowanych do skryptu. Parametr post_max_size dotyczy jednak faktycznej wielkości danych przesyłanych metodą POST, która jest większa od wielkości pliku. Dlatego post_max_size powinien być większy od upload_max_filesize (domyślnie 8MB).
- allow_url_fopen – parametr pozwala na otwieranie poprzez funkcję fopen zdalnych zasobów, tak jakby były one plikami lokalnymi. Jeśli takiej funkcji nie potrzebujesz, warto ustawić wartość na \”off\”, ze względów bezpieczeństwa.
- zlib.output_compression – ustawienie tej flagi na \”on\” spowoduje, że dane wyjściowe zostaną wysłane do przeglądarki w formie skompresowanej. Zmniejsza to ruch na łączach (oraz transfer serwera), ale dzieje się to kosztem większego zużycia procesora.
Po aktualizacji ustawień php.ini dokonaj restartu serwera:
/etc/init.d/apache2 restart
Biblioteka PEAR
Często w trakcie tworzenia skryptów PHP będziesz sięgać do biblioteki z rodziny PEAR. Warto więc doinstalować obsługę PEAR:
aptitude install php-pear
W celu zainstalowania bibliotek w obrębie PEAR musisz dla potrzebnego pakietu wydać polecenie:
pear install
Dla przykładu, aby zainstalować obsługę XML_Serializer wpisz:
pear install XML_Serializer
Wgraj stronę
Pozostał ostatni, najprostszy krok. Do katalogu, w którym przechowujesz strony WWW wgraj skrypt, pamiętając o nadaniu mu rozszerzenia .php. Jeśli wszystko zostało skonfigurowane poprawnie, efekt działania skryptu zobaczysz w przeglądarce internetowej.