Использование FastCGI для хостинга PHP приложений на IIS 7.0
Использование FastCGI для хостинга PHP приложений на IIS 7.0
Автор: Руслан Якушев
Данная статья описывает конфигурацию модулей FastCGI и PHPдля хостинга PHP приложений на IIS 7.0
Важно: Данная статья содержит инструкции по установке компонента FastCGI в операционных системах Windows Server 2008 и Windows Vista SP1. Обратите внимание: на Windows Vista должен быть установлен SP1.
Содержание
- Краткий Обзор
- Включение поддержки FastCGI в IIS 7.0
- Windows Server 2008
- Windows Vista SP1
- Обновление модуля FastCGI
- Administration Pack для IIS 7.0
- Установка и настройка PHP
- Настройка IIS 7.0 для обработки PHP запросов
- Используя консоль управления IIS
- Используя командную строку
- Рекомендуемые руководства по конфигурированию FastCGI и PHP
- Безопасная изоляция для PHP Web сайтов
- Режим рециркуляции PHP процессов
- Версионность PHP
- Рекомендации по безопасности PHP
- Конфигурирование PHP на уровне сайтов
- Модуль URL rewriting для PHP приложений
- Полезные ресурсы
Краткий обзор
Благодаря модулю FastCGI в IIS поддерживается большинство популярных приложений коллективной работы, которые используют протокол FastCGI для хостинга на Web сервере IIS высокопроизводительных и надёжных средств. FastCGI предоставляет высокопроизводительную альтернативу CGI (Common Gateway Interface), стандартного средства, являющегося интерфейсом между внешними приложениями и Web серверами, которые поддерживаются как часть возможностей IIS начиная с первых версий сервера.
Программы CGI выполняются на сервере при каждом запросе, это позволяет обработать запросы, динамически сгенерировать ответы и возвратить их обратно клиентам. Из-за того, что многие приложения коллективной работы не поддерживают исполнения сразу нескольких потоков, CGI позволяет надежно исполненять нескольких процессов под управлением IIS, обрабатывая по одному запросу на процесс. К сожалению это приводит к снижению производительности из-за высоких накладных расходов связанных с необходимостью запуска и остановки процессов при обработке каждого запроса.
FastCGI является более производительным по сравнению с CGI, механизм его работы выглядит так – один и тот же процесс используется для обработки множество поступивших запросов. FastCGI так же поддерживает работу с библиотеками не умеющими безопасно работать в многопоточной среде. При работе с набором повторно используемых процессов мы можем быть уверены в том, что каждый процесс будет обрабатывать не более одного запроса в каждый момент времени.
Включение поддержки FastCGI в IIS 7.0
WindowsServer 2008
Добавьте роль CGI сервиса через меню Server Manager -> Roles -> Add Role Services. Этим мы включим поддержку двух сервисов CGI и FastCGI:
Windows Vista SP1
Добавьте расширение CGI, используя Control Panel -> Programs and Features -> Turn Windows features on or off. Этим мы включим поддержку двух сервисов CGI и FastCGI:
Важно: Установка обновлений для модуля FastCGI
Обновление модуля FastCGI сервера IIS 7.0 решает некоторые проблемы совместимости с популярными PHP приложениями. Установите данное обновление из следующих источников:
- Обновление для Windows Server 2008
- Обновление для Windows Server 2008 x64 Edition
- Обновление для Windows Server 2008 for Itanium-based Systems
- Обновление для Windows Vista SP1
- Обновление для Windows Vista SP1 for x64 based Systems
Установка пакета администрирования для IIS 7.0
Примечание: Данный шаг не обязателен (опционален).
Из большого числа полезных функций административного пакета IIS 7.0 можно выделить интерфейс конфигурирования модуля FastCGI. Административный пакет может быть установлен из следующих источников:
Установка и настройка PHP
Рекомендуется использовать сборку non-thread safe PHP с модулем FastCGI сервера IIS 7.0. Эта сборка PHP дает значительный прирост производительности в отличие от стандартной сборки, т.к не производит проверок thread-safety, которые не требуются, так как сам FastCGI гарантирует однопоточное исполнение процессов, в окружении сервера.
- Загрузите последнюю версию non-thread safe пакета, включая бинарные файлы, по следующей ссылке http://www.php.net/downloads.php.
- Распакуйте файлы в директорию (например C:\PHP). Переименуйте файл php.ini-recommended в php.ini.
- Откройте переименованный файл php.ini, уберите комментарии с нижеперечисленных строк и измените значения в соответствии с предложенными:
Установите fastcgi . impersonate = 1. Модуль FastCGI для IIS может исполнять роль выдачи ключей безопасности для вызовов клиента. Это позволяет IIS определять контекст безопасности для выполняемых запросов.
Значение cgi . fix _ pathinfo =1. cgi.fix_pathinfo обеспечивает поддержку *реальных путей* PATH_INFO/PATH_TRANSLATED для CGI. В предыдущих версиях PHP значение PATH_TRANSLATED указывало на SCRIPT_FILENAME, и не затрагивало директивы PATH_INFO. Дополнительную информацию о PATH_INFO смотрите в документации cgi. Установка данного значения в 1 решает проблему задаваемых путей PHP CGI изменяя пути так чтобы они соотвествовали спецификации.
Установите cgi.force_redirect = 0.
Установите для директивы open _ basedir путь к папке или сетевому ресурсу на котором расположены Web сайт(ты).
Директива extension _ dir определяет расположение расширений для PHP. Обычно, для PHP версий 5.2.X значение для данной директивы устанавливается в extension _ dir = "./ ext "
Для включения необходимых расширений PHP уберите комментарии в файле php.ini с соответствующих строчек, к примеру:
extension=php_mssql.dll
extension=php_mysql.dll
- Для проверки удачной установки PHP выполните следующую команду:
C:\PHP>php –info
Если PHP вместе со всеми компонентами от которых он зависит был установлен корректно, то данная команда выдаст информацию о текущей конфигурации PHP.
Настройка IIS 7.0 для обработки PHP запросов
Для того чтобы приложения PHP корректно работали на IIS 7.0 необходимо настраивать привязку к запрашиваемым файлам, посредством которых IIS будет пропускать специфические PHP запросы к PHP приложениям, используя протокол FastCGI.
Прим.переводчика: при запросе клиентом файла с расширением *. php с Web сайта/сервера, расположенного на IIS 7.0, сервер будет «отдавать» обработку php файлов приложению, отвечающему за обработку php файлов.
Используя консоль управления IIS
Откройте IIS Manager и выберете “Handler Mappings” на уровне управления сервером:
Запустите “Add Module Mapping” для конфигурации, представленной на рисунке ниже:
- Запрашиваемый путь: *.php
- Модуль: FastCgiModule
- Приложение обработчик: " C :\[путь установки PHP ]\ php - cgi . exe "
- Имя: PHP via FastCGI
Нажмите OK. На запрос о создании приложения FastCGI нажмите Yes.
Протестируйте корректную привязку заголовков, созданием файла phpinfo.php в папке C:\inetpub\wwwroot, используя следующий код:
<?php phpinfo(); ?>
Откройте браузер и перейдите по ссылке http://localhost/phpinfo.php. Если установка прошла корректно, то вы увидите стандартную страницу конфигурации PHP:
Примечание: Если Вы не видите в списке модулей "FastCgiModule", то это означает, что модуль не зарегистрирован, либо не включен. Для того, чтобы проверить, зарегистрирован ли модуль FastCGI откройте конфигурационный файл IIS по следующему адресу: %WINDIR%\windows\system32\config\applicationHost.config и проверьте присутствие значения в следующей секции:
<globalModules>:
<add name="FastCgiModule" image="%windir%\System32\inetsrv\iisfcgi.dll" />
Также, в этом же файле, убедитесь в том, что модуль FastCGI добавлен в секцию <modules>:
<add name="FastCgiModule" />
Используя командную строку
Альтернативой предыдущим шагам может служить использование команды appcmd.
Для создания пула приложений FastCGI выполните следующую команду:
C:\>%windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI /+[fullPath='c:\{php_folder}\php-cgi.exe']
После этого создайте привязку заголовков:
C:\>%windir%\system32\inetsrv\appcmd set config /section:system.webServer/handlers /+[name='PHP_via_FastCGI',path='*.php',verb='*',modules='FastCgiModule',scriptProcessor='c:\{php_folder}\php-cgi.exe',resourceType='Unspecified']
Примечание: Если вы используетеPHP версий 4.X,то вместо php-cgi.exe необходимо использовать php.exe.
Рекомендуемые руководства по конфигурированию FastCGI и PHP
Данная ссылка содержит zip архив с файлом презентаций руководств, по разворачиванию хостинга PHP приложений в среде общего хостинга .
Безопасная изоляция для PHPWeb сайтов
Рекомендации по изоляции PHP Web сайтов в среде общего хостинга согласуются с общей безопасностью изоляции, рекомендованной для IIS 7.0. В особенности следует обратить внимание на следующее:
- Используйте один пул приложений на один Web сайт
- Используйте выделенный аккаунт пользователя для пула приложений
- Используйте анонимного пользователя для идентификации пула приложений
- Убедитесь в том, что реализация FastCGI включена в файле php.ini (fastcgi.impersonate=1)
Более подробно о безопасной изоляции в окружении общего хостинга написано в документации «Изолирование сайтов с пулами приложений»
Режим рециркуляции PHP процессов
Убедитесь в том, что FastCGI всегда рециркулирует (перезагружает - прим.перевод) процессы php-cgi.exe, прежде чем завершается работа основного PHP процесса. Режим рециркуляции процессов FastCGI контролируется параметром конфигурации, который называется instanceMaxRequests(максимальное кол-во запросов на экземпляр приложения -прим.перевод). Данное значение определяет, какое кол-во запросов выполнит FastCGI, прежде чем произойдёт рециркуляция. В PHP так же существует функция рециркуляции, которая контролируется параметром PHP _ FCGI _ MAX _ REQUESTS. Установка наименьшего значения для instanceMaxRequestsили подобного параметраPHP _ FCGI _ MAX _ REQUESTS, гарантирует, что основной PHP процесс не будет закончен преждевременно.
Свойства для FastCGI могут быть изменены при помощи IIS Manager или командной строки, используя приложение appcmd.
Использование IISmanager
Для настройки процесса рециркуляции FastCGI, используя IIS Manager, вам необходимо установить Административный пакет для IIS 7.0 и выбрать на уровне севера меню FastCGI settings (параметры FastCGI):
Далее необходимо выбрать приложение FastCGI, которое вы хотите настроить и нажать "Edit..." в панели Actions:
В окне "Edit FastCGI application" установите для параметра instanceMaxRequest значение 10000 нажмав кнопку обзора в меню EnvironmentVariables:
Добавьте переменную PHP _ FCGI _ MAX _ REQUESTS,установив для неё значение в 10000:
Примечение: Если вы не установите данные значения, то по умолчанию они будут следующими: instanceMaxRequests = 200, PHP _ FCGI _ MAX _ REQUESTS = 500 (для большинства сборок PHP).
Использование командной строки:
Для конфигурирования процессов рециркуляции FastCGI и PHP посредством appcmd, используйте следующие команды:
C:\>%windir%\system32\inetsrv\appcmd set config -section:system.webServer/fastCgi /[fullPath='c:\{php_folder}\php-cgi.exe'].instanceMaxRequests:10000
C:\>%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='C:\{php_folder}\php-cgi.exe'].environmentVariables.[name='PHP_FCGI_MAX_REQUESTS',value='10000']"
Версионность PHP
Большинство PHP приложений могут зависеть от функций или расширений доступных только в определённой версии PHP. Если такие приложения должны быть размещены на одном сервере хостинга, то необходимо чтобы на данном сервере одновременно поддерживались и работали разные версии PHP. Обработчик FastCGI в IIS 7.0 полноценно поддерживает одновременную работу различных версий PHP на одном сервере.
К примеру, допустим что на своём Web сервере вы планируете поддерживать следующие сборки: PHP 4.4.8, PHP 5.2.1 и PHP 5.2.5 non-thread safe. Для включения данной возможности вы должны положить соответствующие исполняемые файлы PHP в различные папки на файловой системе (к примеру C:\php448\, C:\php521\ и C:\php525nts) и создать соответствующие пулы приложений для каждой версии:
C:\>%windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI /+[fullPath='c:\php448\php.exe']
C:\>%windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI /+[fullPath='c:\php521\php-cgi.exe']
C:\>%windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI /+[fullPath='c:\php525nts\php-cgi.exe']
Так, если у вас есть 3 Web сайта (site1, site2, site3), каждый из которых должен использовать различные версии PHP, вы можете задать соответствие заголовков для каждого из сайтов, создав соответствующий пул приложений FastCGI.
Примечание: Каждый пул приложений процессов FastCGI будет идентифицируется уникально - комбинацией полного пути и свойствами аргументов.
C:\>%windir%\system32\inetsrv\appcmd set config site1 –section:system.webServer/handlers /+”..[name=’PHP448_via_FastCGI’,path=’*.php’,verb=’*’,modules=’FastCgiModule’,scriptProcessor=’c:\php448\php.exe’,resourceType=’Either’]
C:\>%windir%\system32\inetsrv\appcmd set config site2 –section:system.webServer/handlers /+”..[name=’PHP521_via_FastCGI’,path=’*.php’,verb=’*’,modules=’FastCgiModule’,scriptProcessor=’c:\php521\php-cgi.exe’,resourceType=’Either’]
C:\>%windir%\system32\inetsrv\appcmd set config site3 –section:system.webServer/handlers /+”..[name=’PHP525nts_via_FastCGI’,path=’*.php’,verb=’*’,modules=’FastCgiModule’,scriptProcessor=’c:\php525nts\php-cgi.exe’,resourceType=’Either’]
Рекомендации по безопасности PHP
Следующие настройки могут быть использованы для улучшения безопасности установленного PHP. Следуя рекомендациям найдите и измените в файле php.ini следующие значения:
Значение |
Описание |
allow_url_fopen=Offallow_url_include=Off |
Отключение удалённых URLs для функций управления файлами, которые могут быть использованы во вредоносном коде. |
register_globals=Off |
Отключение register_globals. |
open_basedir="c:\inetpub\" |
Определение директории, в которой процессы PHP могут читать и записывать на файловой системе. |
safe_mode=Offsafe_mode_gid=Off |
Ограничение безопасного режима. |
max_execution_time=30max_input_time=60 |
Лимит времени выполнения |
memory_limit=16Mupload_max_filesize=2Mpost_max_size=8Mmax_input_nesting_levels=64 |
Лимит на использование размеров памяти и файлов. |
display_errors=Offlog_errors=Onerror_log="C:\path\of\your\choice" |
Настройка сообщений об ошибках и ведения логов. |
fastcgi.logging=0 |
Модуль FastCGI для IIS может обрабатывать запросы с ошибками, если PHP отправляет данные в stderr (стандартный поток ошибок – прим.перевод) используя протокол FastCGI. Отключение ведения логов FastCGI предотвращает отправку приложением PHP сообщений об ошибках, используя stderr, генерируя при этом ошибку с кодом 500 для клиентов. |
expose_php=Off |
Скрытие присутствия PHP |
Конфигурирование PHP на уровне сайтов
Данная секция описывает процедуры, которые необходимы для настройки PHP на уровне сайтов. Хочется обратить внимание на то, что данная рекомендация обнародована и проверена Radney Jasmin совместно с хостинг провайдером GoDaddy.com, который официально поддерживает PHP хостинг на Windows Server 2008 посредством FastCGI.
Пулы процессов PHP на уровне сайтов
Когда каждый Web сайт имеет собственный пул приложений (это является рекомендованной практикой для IIS 7.0), появляется возможность ассоциировать выделенный пул процессов FastCGI с каждым Web сайтом. Пул приложений процессов FastCGI идентифицируется уникально - комбинацией полного пути и атрибутами аргументов. Итак, если необходимо создать несколько процессорных пулов FastCGI для некоторого исполняемого процесса, такого как php-cgi.exe,то атрибуты аргументов могут использоваться для разграничения процессорных пулов. В дополнении процессы php-cgi.exe с применением ключа командной строки «-d», могут использоваться для определения INI записи в процессе PHP. Данный ключ может быть использован для установки различных значений PHP, которые позволяют задавать уникальность аргументов для каждого пула.
К примеру, если двум Web сайтам "website1" и "website2" необходимо использовать собственные настройки PHP, то нужно изменить пул процессов FastCGI следующим образом:
<fastCgi>
<application fullPath="C:\PHP\php-cgi.exe" arguments=" -d open_basedir=C:\Websites\Website1" />
<application fullPath="C:\PHP\php-cgi.exe" arguments=" -d open_basedir=C:\Websites\Website2" />
</fastCgi>
В данном примере настройки PHP, в частности директива open _ basedir , используются для разграничения процессорных пулов. В дополнении это заставляет PHP процесс выполняться для каждого пула процессов только в той директории, в которой расположен корневой Web сайт.
Тогда website1 может иметь сопоставление PHP заголовков, как показано ниже:
<system.webServer>
<handlers accessPolicy="Read, Script">
<add name="PHP via FastCGI" path="*.php" verb="*" modules="FastCgiModule" scriptProcessor="C:\PHP\php-cgi.exe|-d open_basedir=C:\Websites\Website1" resourceType="Unspecified" requireAccess="Script" />
</handlers>
</system.webServer>
и website2 может иметь следующее сопоставление PHP заголовков:
<system.webServer>
<handlers accessPolicy="Read, Script">
<add name="PHP via FastCGI" path="*.php" verb="*" modules="FastCgiModule" scriptProcessor="C:\PHP\php-cgi.exe|-d open_basedir=C:\Websites\Website2" resourceType="Unspecified" requireAccess="Script" />
</handlers>
</system.webServer>
Определение месторасположения файла php . ini
Во время запуска процесс PHP определяет месторасположение файла конфигурации php.ini используя различные настройки. В официальной документации PHP детально описан процесс инициализации (начального запуска) процесса PHP. Так, одним из мест поиска процессом PHP своего файла конфигурации (php.ini) может быть директива PHPRC (PHPRC – это переменная среда ОС, как TMP или Temp – прим.перевод). Если процесс PHP находит файл конфигурации, определённый в вышеописанной директиве, то он начинает использовать данный файл конфигурации, игнорируя путь заданный по умолчанию в файле php.ini. Данная директива полезна для пользователей хостинга, они могут применять свои собственные настройки php.ini на уровне своих сайтов.
К примеру, существует два Web сайта: website1 и website2; расположенных по следующим путям C:\WebSites\website1 и C:\WebSites\website2, тогда пул процессов php-cgi.exe в секции <fastCgi> файла applicationHost.config должен иметь следующий вид:
<fastCgi>
<application fullPath="C:\PHP\php-cgi.exe" arguments="-d open_basedir=C:\Websites\Website1">
<environmentVariables>
<environmentVariable name="PHPRC" value="C:\WebSites\website1" />
</environmentVariables>
</application>
<application fullPath="C:\PHP\php-cgi.exe" arguments="-d open_basedir=C:\WebSites\Website2">
<environmentVariables>
<environmentVariable name="PHPRC" value="C:\WebSites\website2" />
</environmentVariables>
</application>
</fastCgi>
В данном случае WebSite1 имеет свои настройки php.ini файла, который расположен в директории C:\WebSites\website1, тогда как WebSite2 имеет свои настройки файла php.ini, который расположен в директории C:\WebSites\website2. Данная конфигурация так же предполагает что значение PHPRC не задано, иначе сделать уникальные установки файла php.ini на уровне сайтов не представляется возможным.
Модуль URLrewriting для PHP приложений
Большинство популярных PHP приложений используют функциональность URL rewriting на Web серверах, которая предоставляет отображение дружественных ссылок и более корректное предоставление информации для поисковых машин (ссылки вида http://site.name/page123,а не http://site.name/mod_content/page.php=id123&disp - прим.перевод). В IIS 7.0 поддержка URL rewriting (перезапись ссылок) поддерживается посредством модуля URL rewrite.
В следующих статьях представлено подробное описание данного модуля:
- Работа с модулем Microsoft URL Rewrite. Описывается метод настройки модуля URL Rewrite.
- Детальное описание конфигурации модуля Microsoft URL Rewrite. Описывается функционал данного модуля и возможность всех опций.
- Настройка популярных PHP приложений совместно с модулем URL Rewrite:
Полезные ресурсы
Дополнительную информацию о хостинге PHP приложений на IIS 7.0 вы можете прочитать на следующих ресурсах:
- Популярные PHP приложения на IIS
- Настройка расширения FastCGI для IIS 6.0
- Использование расширения FastCGI для хостинга PHP на IIS 6.0
- Установка поддержки FastCGI на Windows Server 2008 Core
Схожие ресурсы
Статьи
- Настройка FastCGI для PHP
- Установка PHP на Windows Vista с модулем FastCGI
- Установка поддержки модуля FastCGI на Server Core
- Вопросы PHP
Comments
- Anonymous
September 04, 2014
"defend radiation project" soil samples collected in 132 areas nike air max pas cher . Test results show that,nike air max pas piumino peuterey cher, per cubic meter of soil radioactivity over 37000 Becquerels of region total 22. The reason is limited - Anonymous
September 05, 2014
The comment has been removed - Anonymous
September 05, 2014
giubbotto peuterey (this article nike air max source: Chinese daily)
The investigation will focus on
,giubbotto peuterey
,nike air max, hosted by veteran Italy reporter Santoro talk show "AnnoZero". Santoro repeatedly cr nike air max 1 iticized - Anonymous
September 05, 2014
"this approach as we used to see not accustomed to,abercrombie p abercrombie pas cher as cher, inexperienced people always thought that his car was a thief stole, basket louboutin avowed and hapless settle a matter by leaving it unsettled, you don't think - Anonymous
September 05, 2014
17 stalls per the programs broadcast at the same tim timberland catalogo e, made a strange life.
but the side of the woman would feel embarrass tn pas cher homme ed, she can leave some permanent. so -- "not good is the traitor". happiness is reading - Anonymous
September 05, 2014
she vowed to build special channel as long a flood control measur hollister magasin es,hollister magasin.
Bangkok Metropoli nike tn pas cher tan Administration spokesman Judd said: "in order to calculate the area of Bangkok,nike tn pas cher - Anonymous
September 06, 2014
has been committed to the protection and restoration of the traditional festiva holister ls of Fuzhou customs he,holister, repo louboutin pas cher femme rter saw.
effectively alleviate traffic. this month 29 days to June 17th,louboutin pas cher femme - Anonymous
September 06, 2014
Time of the incident.
time: 16 days afternoon peuterey location: Minqing County Yunlong Xiang Tan Kou industrial zone of louboutin femme a construction site will receive a bonus of 78000 yuan and apple notebook computer. with a certain degree of confusion - Anonymous
September 06, 2014
to say the least,air max femme, the outlook is grim. air max femme But more and more peopl outlet timberland e realize,outlet timberland, printing mode situation than a few years ago expected risk. The people of that time,moleton hollister, advertising - Anonymous
September 08, 2014
,scarponcini timberland
he said: "the scarponcini timberland new government announced after consul bermuda hollister tations are required at all,bermuda hollister, hope that these negotiations will end in the near future."
A reluctant - Anonymous
September 08, 2014
UN Secretary General Ban Ki-moon at the meeting called on t louboutin homme he international c air max femme ommunity to reach a consensus on the issue of nuclear safety and take strong action, while establishing strict safety standards,louboutin homme - Anonymous
September 09, 2014
to complete data,abercombrie, difficult cases need further investiga abercombrie tion a louboutin nd verification in 60 working days to still can not determine the claim result, can the investigation period appropriately extended, but the company shall - Anonymous
October 07, 2014
in new network on 14 October,tiffany outlet, according to foreign reports, tiffany outlet tiffany, the evening o tiffany f 13 local time,nike air max, USA Seattle police arrested 10 "occupation of Seattle" activities of protesters in a park. "Occupation - Anonymous
October 07, 2014
The comment has been removed - Anonymous
November 05, 2015
Картинки не открываются! - Anonymous
November 09, 2015
The comment has been removed - Anonymous
November 09, 2015
The comment has been removed