Jaa


IIS 7.0: краткая инструкция для системного администратора. Часть 1 – установка FastCGI/PHP

По просьбам трудящихся продолжаю приостановленную ввиду высокой рабочей нагрузки тему администрирования веб-серверами под управлением IIS 7.0 (темы установка, тестирование и конфигурирование Server Core для IIS). Решил “перепрыгнуть” через несколько запланированных тем и перейти к наиболее часто задаваемому вопросу “как установить PHP на IIS 7.0?”. Отвечаю – просто… :)

Для начала хочу сказать пару слов о теории этого процесса. Для повышения производительности и эффективности работы CGI-приложений, скрипты которых обычно вызываются по запросу к веб-серверу путем создания рабочего процесса обработчика и после выполнения скрипта этот рабочий процесс уничтожается, в IIS 7 реализован механизм FastCGI. FastCGI реализует механизм повторного использования запущенных процессов обработчиков тех или иных скриптов (например, PHP), что позволяет значительно повысить производительность и распараллелить выполнение разных скриптов одним процессом, даже если многопоточная обработка запросов не реализована в самом обработчике. Все это делает IIS 7.0 одной из самых производительных платформ для веб-решений на базе того же PHP.

Итого, для администратора здесь присутствуют 3 задачи – установить и сконфигурировать FastCGI, “родной” модуль IIS 7.0; установить и сконфигурировать Windows-реализацию нужного интерпретатора скриптов (как наиболее часто используемый сценарий рассматриваем PHP); “подружить” между собой IIS и PHP.

Задача 1 – установка FastCGI.

Модуль FastCGI является штатной единице IIS 7.0 и входит в состав более “крупного” сервиса CGI, который просто выберается в мастере установки роли IIS, рассмотренном в предыдущих постах.

cgi1

При успешном процессе установки, по окончании мастера установки IIS с выбранным сервисом CGI в консоли менеджера IIS – Internet Information Services (IIS) Manager – при выборе узла сервера или сайта в дереве конфигурации в центральной панели среди иконок модулей должна появиться иконка CGI

iis1

Далее, если планируется использование PHP, то, кроме обычной процедуры установки обновлений к Windows Server 2008 и IIS 7.0 рекомендуется также установить обновление KB954946, которое улучшает работу PHP с переменными окружения.

iis2

Итого, начальная установка модуля FastCGI для исполнения PHP или каких-либо других CGI-скриптов под IIS 7.0 завершена.

Задача 2 – установка и начальное конфигурирование PHP под Windows.

Берем “почти обычный” PHP под Windows по штатному адресу сайта сообщества PHP – http://www.php.net, выбираем там последнюю устойчивую сборку (на момент написания это 5.2.8). А “почти” потому, что нам требуется та сборка, которая Non-thread-safe (как уже писалось выше, FastCGI сам занимается управлением потоками и зачем тогда лишний раз дублировать эту функциональность? Кстати, это тоже дает небольшое повышение производительности), да и собственно инсталлировать там нечего, поэтому берем простой .ZIP архив, который мы просто распакуем и сконфигурируем далее.

iis3 cgi3

После загрузки архивного файла с нужной сборкой PHP, распаковываем его на наиболее подходящий для каждой конкретной конфигурации веб-сервера диск с соответствующей папкой (для данного примера это C:\PHP528). Находим в папке файл базовой рекомендуемой конфигурации php.ini-recommended и просто переименовываем его в php.ini.

cgi5

Открываем полученный php.ini в любом текстовом редакторе (Notepad вполне подойдет): и производим несколько правок, а именно:

  • Устанавливаем значение переменной конфигурации fastcgi.impersonate = 1 – это обеспечит возможность запускать PHP-скрипты с параметрами безопасности учетной записи, определенной в Application Pool сайта
  • Установка cgi.fix_pathinfo = 1 обеспечивает “правильную” работу PATH_INFO
  • Запрещаем (явно, для безопасности) редирект cgi.force_redirect = 0
  • В случае, если у нас единичный сайт (или сайты одно разработчика/пользователя) под управлением PHP, указываем путь к корневому каталогу сайта в переменной open_basedir. Если сайтов несколько и все они требуют собственных путей, то это можно указать отдельно, через параметры <fastCGI> или <handlers> конфигурационных файлой IIS: applicationHost.config (для всего сервера) или web.config (отдельного сайта)
  • и, наконец, указываем путь к расширениям PHP, идущим в комплекте или используемым отдельно, через переменную extension_dir = “./” , которую меняем на полный “правильный” путь к расширениям типа нашего “C:\PHP528\ext” и не забываем раскомментировать нужные расширения из списка ниже самого параметра.

Все, базовые параметры для работы PHP настроены, тонкости “заточки” мы обсудим позднее. Теперь остался последний шаг – сконфигурировать совместную работу IIS 7.0 и PHP.

Задача 3 – конфигурирование IIS 7.0 для работы с PHP.

Проще простого – выбираем в левой панели Internet Information Services (IIS) Manager либо узел всего веб-сервера (это позволит сконфигурировать PHP на обработку запросов к любому веб-сайту), либо отдельного веб-сайта (это позволит держать разные версии PHP для разных веб-сайтов) и в центральной панели находим иконку модуля “Handler Mappings”, отвечающего за “привязку” различных вызовов к модулям-ответчикам, и открываем его.

cgi6

Видим список текущих привязок, убеждаемся, что к расширению типа *.php еще никто не "привязался". В правой панели консоли с открытыми параметрами "Handler Mappings" выбираем действие "Add Module Mapping... ". Привязка именно модуля и обеспечит нам выполнение скриптов с расширением *.php с применением PHP, но среда их выполнения будет контролироваться модулем FastCGI. Для этого в открывшемся диалоговом окне Add Module Mapping вводим в поле "Request path: " значение *.php, из списка "Module: " выбираем FastCgiModule, в "Executable" при помощи кнопки "..." находим php-cgi.exe в каталоге с только что развернутым PHP (для нашего примера это C:\PHP528\php-cgi.exe), ну а имя в поле "Name: " - по личной фантазии - я предпочитаю что-то типа PHP 5.2.8. И нажимаем в диалоговом окне Ok, а после, подтверждаем наши действия еще раз кнопкой Yes.

cgi7 cgi8

Все сделано. Теперь IIS 7.0 может успешно выполнять скрипты PHP. Единственная рекомендация – для каждого веб-сайта под управлением PHP создавать свой отдельный Application Pool и запускать его под специальной учетной записью.

Для проверки работы PHP создаем в каталоге C:\inetpub\wwwroot (путь к корневому каталогу сайта по умолчанию Default Web Site) текстовый файл с расширением .php (например, start.php) со следующим содержимым:

<?php
phpinfo();
?>

и вызываем его из браузера, например, http://localhost/start.php. Если вы видите на своем экране примерно то же, что приведено на скриншоте ниже – значит, PHP у вас работает нормально.

cgi9

Продолжение темы по администрированию IIS 7.0 следует.