Własny web server na IIS7.5 cz.1 PHP

Od dłuższego czasu hobbystycznie, a czasem i nie tylko, zajmuję się rozwiązaniami webowymi. Głównie mam tu na myśli programowanie w PHP. Zazwyczaj pracowałem na serwerach webowych opartych o apache’a, niemniej ostatnio zainteresowałem się Microsoft’owym rozwiązaniem jakim jest IIS. Z czasów IIS 5 czy 6 bardzo sceptycznie podchodziłem do tego produktu, lecz od wersji IIS 7.5 coraz bardziej przekonuję się do tego rozwiązania.

Z racji, iż ostatnio byłem zmuszony do postawienia takiej maszyny, postanowiłem opisać po trochu podstawowe operacje jak to wykonać i jak z tym żyć. Jak wiadomo jestem wielkim fanem rozwiązania Windows Server Core oraz PowerShella, dlatego całość będzie wykonana na świeżo postawionej platformie Windows Server 2008 R2 właśnie w trybie Core.

Zanim jednak zaczniemy instalować IIS’a, przygotujmy sobie nasze środowisko. By móc pracować z PowerShellem na platformie Core konieczne jest zainstalowanie najpierw .NETa, dopiero wtedy możemy przystąpić do instalacji PowerShella wraz z niezbędnymi komponentami:

start /w ocsetup NetFx2-ServerCore
start /w ocsetup MicrosoftWindowsPowerShell
start /w ocsetup ServerManager-PSH-Cmdlets

Następnym etapem jest instalacja rolę IIS.

start /w ocsetup IIS-WebServerRole

W przypadku gdy chcemy również wykorzystywać aplikacje ASP musimy zainstalować dodatkowe komponenty jak np. WAS-NetFxEnvironment, IIS-ISAPIExtensions, IIS-ISAPIFilter, IIS-NetFxExtensibility, IIS-ASPNET. Nie mniej jednak do samej obsługi PHP prócz domyślnych elementów roli IIS, wystarczy nam tylko dodatkowy komponent obsługi skryptów CGI:

start /w ocsetup IIS-CGI

W przypadku korzystania z wersji PHP 5.2 ten element nie jest potrzebny, niestety gdy chcemy korzystać z wersji PHP 5.3 musimy doinstalować dodatkowo paczkę Microsoft Visual C++ 2008 Redistributable Package. W chwili pisania artykułu jest dostępna tylko paczka PHP 5.3.3 x86, dlatego pobierana paczka musi być również dla architektury x86 (vcredist_x86.exe) – mimo, iż sam Windows Serwer 2008 R2 pracuje w architekturze x64. Chodzi po prostu o dostarczenie bibliotek dla kompilatora w tej samej architekturze. Prawdpodobnie gdy wyjdzie PHP 5.3 w architekturze x64 będą wymagane tylko biblioteki vcredist_x64.exe.

Następnie ściągamy kompilator PHP. Jak już wspomniałem w trakcie pisania tego artykułu najnowsze dostępne wydanie PHP to 5.3.3, które posiada dwie wersje VC6 dedykowana dla serwerów Apache oraz VC9 dla serwerów IIS. Dodatkowo możemy pobrać kompilator w dwóch wariantach Non-Thread-Safe (przystosowany do pracy z FastCGI), który wybieramy oraz Thread Safe (przystosowany do pracy z ISAPI).

Rozpakowujemy paczkę najlepiej do katalogu C:\php, a jeden z plików konfiguracyjnych C:\php\php.ini-X kopiujemy do katalogu C:\Windows. W zależności od wydania spotkałem się z php.ini-dist /php.ini-recommended (wersje PHP 5.2) lub php.ini-development/php.ini-production (wersje PHP 5.3). Wszystkie te pliki umożliwiają wykorzystywanie podstawowych funkcji PHP niemniej różnią się pod kątem konfiguracji bardziej zaawansowanych parametrów oraz bezpieczeństwa serwera. Do celów testowych najlepiej nadaje się konfiguracja php.ini-development, która jest bardziej elastyczna.

copy C:\php\php.ini-development C:\Windows\php.ini

Sprawdzamy czy kompilator działa poprawnie:

C:\php\php -info | more

Najczęstszą przyczyną występowania błędów w tym momencie jest brak lub uszkodzenie bibliotek Microsoft Visual C++ 2008 Redistributable Package. Jeżeli nie wystąpią żadne problemy i wyświetli się obecna konfigutacja PHP, możemy przystąpić do konfiguracji roli IIS. Uruchamiamy do tego celu konsolę PowerShell:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

W celu załadowania przystawki zarządzania IIS konieczne jest ustawienie polityki wykonywania skryptów na RemoteSigned.

Set-ExecutionPolicy RemoteSigned

Następnie importujemy przystawkę WebAdministration i zapoznajemy się z dostępnymi komendami

Import-Module WebAdministration
Get-Command –pssnapin WebAdministration

Podpinamy procesor skryptów PHP i wiążemy go z modułem FastCgiModule:

New-WebHandler -Name PHP -Path *.php -Verb * -Module FastCgiModule -ScriptProcessor C:\php\php-cgi.exe

Nastęnie dopisujemy konfigurację modułu FastCGI:

Add-WebConfiguration "/system.webServer/fastCGI" -value @{fullPath="C:\php\php-cgi.exe"}

oraz ustawiamy aby pliki index.php były interpretowane jako domyślne dokumenty:

Add-WebConfiguration "/system.webServer/defaultDocument/files" -value @{value="index.php"}

Przy takiej minimalnej konfiguracji powinny być już obsługiwane proste skrypty PHP. By to sprawdzić tworzymy sobie plik phpinfo.php, w którym wstawiamy wywołanie funkcji wyświetlającej konfigurację kompilatora PHP:

New-Item "c:\inetpub\wwwroot\phpinfo.php" -type file -force -value "<?php phpinfo(); ?>"

Uruchamiamy przeglądarkę na maszynie klienckiej lub dowolnej innej jednakże nie w wersji Core i łączymy się z naszym nowo utworzonym serwerem.

Jak widzimy pojawia się klasyczny błąd przy domyślnej konfiguracji. Problem polega po prostu na braku dostępu do katalogu, w którym ma być utworzony log z błędami PHP. Istnieją trzy rozwiązania, a mianowicie przekonfigurowanie parametrów pliku C:\Windows\php.ini:

  1. Wyłączenie logowania błędów (Niezalecane) – log_errors = Off
  2. Przełączenie pliku logowania na Dziennik zdarzeń – error_log = syslog
  3. Zmiana ścieżki dostępu do pliku logowania (należy pamiętać, by nadać uprawnienia zapisu do tego pliku) – error_log=”C:\inetpub\temp\php-errors.log”

Podczas zmiany konfiguracji pliku php.ini trzeba pamiętać, iż każdorazowo po zapisaniu zmian trzeba zrestartować usługę IIS:

iisreset

W kolejnych częściach postaram się opisać instalację i konfigurację MySQL’a, konfigurację FTP oraz obsługę własnych serwerów DNS.

Źródła:
http://www.php.net/
http://technet.microsoft.com/en-us/library/cc766272(WS.10).aspx
http://technet.microsoft.com/en-us/library/ee909471(WS.10).aspx

Reklamy

2 thoughts on “Własny web server na IIS7.5 cz.1 PHP

  1. Zmiana ścieżki dostępu do pliku logowania (należy pamiętać, by nadać uprawnienia zapisu do tego pliku) – error_log=”C:\inetpub\temp\php-errors.log”

    dla jakiego uzytkownika?

    • Chodzi tutaj o użytkownika (grupę) pod którym chodzi usługa IIS. O ile dobrze kojarzę wystarczy dodać grupę IIS_IUSRS z prawami do zapisu, tak aby IIS mógł zapisywać plik logowania zdarzeń PHP.

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s