Приложение приложения <FastCGI>

Обзор

Элемент FastCGI содержит параметры конфигурации для определенного определения пула процессов FastCGI <application> . При использовании FastCGI служба IIS будет использовать значение в атрибуте <application> maxInstances элемента для определения количества процессов FastCGI, которые могут выполняться в пуле процессов.

Самое простое определение пула приложений FastCGI требует включения атрибута fullPath в <application> элемент для определения двоичных файлов, используемых для конкретной платформы приложений. Для платформы PHP задайте для атрибута fullPath имя каталога и файла двоичных файлов PHP.

Другие атрибуты являются необязательными и позволяют настроить ряд других параметров. К ним относятся максимальное количество запросов, которые может обрабатывать рабочий процесс FastCGI до его перезапуска, максимальное количество рабочих процессов для пула приложений и максимальное время, которое может занять запрос FastCGI.

Примечание.

Чтобы обрабатывать запросы с помощью FastCGI, сначала необходимо сопоставить путь и определенные расширения имени файла с модулем FastCGI и указать целевой процесс FastCGI в качестве обработчика скриптов.

Новые возможности в IIS 7.5

IIS 7.5 добавил в элемент следующие атрибуты <fastCgi>/<application> :

  • Атрибут monitorChangesTo позволяет указать файл для отслеживания изменений, которые могут повлиять на поведение приложения FastCGI. Например, если вы используете платформу PHP, можно настроить СЛУЖБЫ IIS для мониторинга PHP. INI-файл для изменений, указав полный путь к файлу в атрибуте monitorChangesTo .
  • Атрибут stderrMode указывает, как IIS 7 будет обрабатывать ошибки, возвращаемые из приложения FastCGI через поток STDERR.
  • Атрибут signalBeforeTerminateSeconds позволяет настроить службы IIS для ожидания заданного периода времени после того, как IIS сигнализирует приложению FastCGI о завершении работы. Это позволяет приложению FastCGI очистить все параметры перед завершением процесса IIS.

Совместимость

Версия Примечания.
IIS 10.0 Элемент <application> не был изменен в IIS 10.0.
IIS 8.5 Элемент <application> не был изменен в IIS 8.5.
IIS 8.0 Значение атрибута maxInstances по умолчанию было изменено с 04 IIS 8.0.
IIS 7.5 Элемент <application><fastCgi> коллекции был обновлен в IIS 7.5 с атрибутами monitorChangesTo, stderrMode и signalBeforeTerminateSeconds .
IIS 7.0 Элемент <application><fastCgi> коллекции появился в IIS 7.0.
IIS 6,0 Н/П

Настройка

Чтобы использовать среду FastCGI, необходимо сначала установить службу ролей CGI. Процесс установки регистрирует службу ролей Common Gateway Interface (CGI) в обоих элементах <globalModules> и <modules> элементах. Чтобы установить среду FastCGI, вам не нужно выполнять никаких других действий.

Windows Server 2012 или Windows Server 2012 R2

  1. На панели задач щелкните Диспетчер сервера.
  2. В диспетчер сервера щелкните меню "Управление" и выберите пункт "Добавить роли и компоненты".
  3. В мастере добавления ролей и компонентов нажмите кнопку "Далее". Выберите тип установки и нажмите кнопку "Далее". Выберите целевой сервер и нажмите кнопку "Далее".
  4. На странице ролей сервера разверните веб-сервер (IIS), разверните веб-сервер, разверните узел "Разработка приложений", а затем выберите CGI. Нажмите кнопку Далее.
    Снимок экрана: диалоговое окно
  5. На странице Выбор компонентов нажмите кнопку Далее.
  6. На странице Подтверждение выбранных элементов для установки щелкните Установить.
  7. На странице Результаты нажмите кнопку Закрыть.

Windows 8 или Windows 8.1

  1. На начальном экране переместите указатель на левый нижний угол, щелкните правой кнопкой "Пуск" и щелкните панель управления.
  2. В панель управления щелкните "Программы и компоненты", а затем выберите "Включить или отключить функции Windows".
  3. Разверните службы IIS, разверните веб-службы World Wide, разверните компоненты разработки приложений и выберите CGI.
    Снимок экрана: диалоговое окно
  4. Щелкните OK.
  5. Нажмите кнопку Закрыть.

Windows Server 2008 или Windows Server 2008 R2

  1. На панели задач нажмите кнопку "Пуск", наведите указатель на Администратор istrative Tools, а затем щелкните диспетчер сервера.
  2. В области иерархии диспетчер сервера разверните узел "Роли" и выберите веб-сервер (IIS).
  3. В области веб-сервера (IIS) прокрутите страницу до раздела "Службы ролей" и нажмите кнопку "Добавить службы ролей".
  4. На странице "Выбор служб ролей" мастера добавления служб ролей выберите CGI и нажмите кнопку "Далее".
    Снимок экрана: страница
  5. На странице Подтверждение выбранных элементов для установки нажмите кнопку Установить.
  6. На странице Результаты нажмите кнопку Закрыть.

Windows Vista или Windows 7

  1. На панели задач нажмите кнопку "Пуск" и щелкните панель управления.
  2. В панель управления щелкните "Программы и компоненты", а затем нажмите кнопку "Включить или отключить компоненты Windows".
  3. Разверните службы IIS, а затем выберите CGI и нажмите кнопку "ОК".
    Снимок экрана: диалоговое окно

Инструкции

Примечание для пользователей IIS 7.0. Для некоторых действий, описанных в этом разделе, может потребоваться установить пакет microsoft Администратор istration для IIS 7.0, включающий пользовательский интерфейс для параметров FastCGI. Чтобы установить пакет microsoft Администратор istration для IIS 7.0, см. следующий URL-адрес:

Создание глобального сопоставления обработчиков FastCGI для PHP

Примечание.

Перед выполнением следующей процедуры необходимо установить двоичные файлы, которые будут выполнять указанный путь к файлу или расширение имени файла. В этом примере используется реализация PHP, доступная из www.php.net.

  1. Откройте диспетчер службы IIS (IIS):

    • Если вы используете Windows Server 2012 или Windows Server 2012 R2:

      • На панели задач щелкните диспетчер сервера, щелкните "Сервис" и щелкните диспетчер службы IIS (IIS).
    • Если вы используете Windows 8 или Windows 8.1:

      • Удерживайте клавишу Windows, нажимайте букву X и щелкните панель управления.
      • Щелкните Администратор istrative Tools и дважды щелкните диспетчер службы IIS (IIS).
    • Если вы используете Windows Server 2008 или Windows Server 2008 R2:

      • На панели задач нажмите кнопку "Пуск", наведите указатель на Администратор istrative Tools, а затем щелкните диспетчер службы IIS (IIS).
    • Если вы используете Windows Vista или Windows 7:

      • На панели задач нажмите кнопку "Пуск" и щелкните панель управления.
      • Дважды щелкните Администратор istrative Tools, а затем дважды щелкните диспетчер службы IIS (IIS).
  2. В области Подключение ions щелкните имя сервера, для которого необходимо настроить сопоставления обработчиков FastCGI.

  3. На панели "Главная" дважды щелкните сопоставления обработчиков.
    Снимок экрана: домашняя страница веб-сайта по умолчанию. Выделен значок сопоставления обработчиков.

  4. В области действий нажмите кнопку "Добавить сопоставление модулей"
    Снимок экрана: окно I S Manager, отображающее страницу

  5. Введите следующие данные:

    • Введите расширение имени файла в текстовом поле пути запроса. Например, "*.php".

    • Щелкните FastCgiModule в раскрывающемся списке модуля .

    • Введите путь к обработчику сценариев в поле исполняемого файла. Например, "C:\PHP\php-cgi.exe".

    • Введите уникальное имя для сопоставления обработчика в поле "Имя ". Например, PHP-FastCGI.

      Снимок экрана: диалоговое окно

    • Нажмите кнопку " Ограничения запросов"

    • Выберите обработчик вызова, только если запрос сопоставляется с.

    • Щелкните, чтобы выбрать параметр "Файл" или "Папка ".

    • Щелкните OK.

      Снимок экрана: диалоговое окно

  6. Щелкните OK.

  7. Если вам будет предложено создать приложение FastCGI в диалоговом окне "Добавление сопоставления модулей", нажмите кнопку "Да".

    Снимок экрана: диалоговое окно

    Примечание.

    Это автоматически создаст приложение FastCGI для только что созданного сопоставления обработчика. Если вы выберете "Нет", вы можете создать приложение FastCGI вручную позже.

Создание приложения FastCGI для PHP

Примечание.

Перед выполнением следующей процедуры необходимо установить двоичные файлы, которые будут выполнять указанный путь к файлу или расширение имени файла. В этом примере используется реализация PHP, доступная из www.php.net.

Примечание.

Добавление приложения FastCGI не добавляет сопоставление обработчика автоматически. Для этого выполните действия, описанные в руководстве по созданию глобального сопоставления обработчика FastCGI для PHP раздела этой статьи.

  1. Откройте диспетчер службы IIS (IIS):

    • Если вы используете Windows Server 2012 или Windows Server 2012 R2:

      • На панели задач щелкните диспетчер сервера, щелкните "Сервис" и щелкните диспетчер службы IIS (IIS).
    • Если вы используете Windows 8 или Windows 8.1:

      • Удерживайте клавишу Windows, нажимайте букву X и щелкните панель управления.
      • Щелкните Администратор istrative Tools и дважды щелкните диспетчер службы IIS (IIS).
    • Если вы используете Windows Server 2008 или Windows Server 2008 R2:

      • На панели задач нажмите кнопку "Пуск", наведите указатель на Администратор istrative Tools, а затем щелкните диспетчер службы IIS (IIS).
    • Если вы используете Windows Vista или Windows 7:

      • На панели задач нажмите кнопку "Пуск" и щелкните панель управления.
      • Дважды щелкните Администратор istrative Tools, а затем дважды щелкните диспетчер службы IIS (IIS).
  2. В области Подключение ions щелкните имя сервера, для которого необходимо настроить параметры FastCGI.

  3. В области "Главная" дважды щелкните FastCGI Параметры.

    Снимок экрана: домашняя страница сервера. Выделена Параметры Fast C G I.

  4. В области "Действия" нажмите кнопку "Добавить приложение".

    Снимок экрана: страница fast C G I Параметры в I S Manager.

  5. В диалоговом окне "Добавление приложения FastCGI" введите следующие сведения:

    • Введите путь к обработчику сценариев в поле "Полный путь ". Например, "C:\PHP\php-cgi.exe".

    • Введите максимальное количество запросов для приложения FastCGI.

      Примечание.

      Для PHP это число должно быть меньше или равно максимальному количеству запросов к среде PHP, которое настраивается с помощью переменной среды PHP_FCGI_MAX_REQUESTS.

      Снимок экрана: диалоговое окно

  6. Щелкните многоточие (...) рядом с EnvironmentVariables , чтобы открыть редактор коллекции переменных среды.

  7. В диалоговом окне редактора коллекции EnvironmentVariables нажмите кнопку "Добавить".

    Снимок экрана: диалоговое окно редактора коллекции переменных среды.

  8. Введите следующие сведения и нажмите кнопку "ОК".

    • Введите "PHP_FCGI_MAX_REQUESTS" для имени.

    • Введите значение 10000.

      Снимок экрана: диалоговое окно редактора коллекции переменных среды. P P F F G Max Requests выделен в поле

  9. Нажмите кнопку "ОК ", чтобы закрыть диалоговое окно "Добавить приложение FastCGI".

Добавление переменной среды FastCGI для PHP

Примечание.

Перед выполнением следующей процедуры необходимо установить двоичные файлы, которые будут выполнять указанный путь к файлу или расширение имени файла. В этом примере используется реализация PHP, доступная из www.php.net.

  1. Откройте диспетчер службы IIS (IIS):

    • Если вы используете Windows Server 2012 или Windows Server 2012 R2:

      • На панели задач щелкните диспетчер сервера, щелкните "Сервис" и щелкните диспетчер службы IIS (IIS).
    • Если вы используете Windows 8 или Windows 8.1:

      • Удерживайте клавишу Windows, нажимайте букву X и щелкните панель управления.
      • Щелкните Администратор istrative Tools и дважды щелкните диспетчер службы IIS (IIS).
    • Если вы используете Windows Server 2008 или Windows Server 2008 R2:

      • На панели задач нажмите кнопку "Пуск", наведите указатель на Администратор istrative Tools, а затем щелкните диспетчер службы IIS (IIS).
    • Если вы используете Windows Vista или Windows 7:

      • На панели задач нажмите кнопку "Пуск" и щелкните панель управления.
      • Дважды щелкните Администратор istrative Tools, а затем дважды щелкните диспетчер службы IIS (IIS).
  2. В области Подключение ions щелкните имя сервера, для которого необходимо настроить параметры FastCGI.

  3. В области "Главная" дважды щелкните FastCGI Параметры.

    Снимок экрана: домашняя страница сервера в I S Manager. Выделен значок THe для Fast C G I Параметры.

  4. Выделите приложение PHP в области Параметры FastCGI, а затем нажмите кнопку "Изменить" в области "Действия".

    Снимок экрана: страница fast C G I Параметры в I S Manager.

  5. В диалоговом окне "Изменение приложения FastCGI" щелкните многоточие (...) рядом с EnvironmentVariables, чтобы открыть редактор коллекции переменных среды.

    Снимок экрана: диалоговое окно

  6. В диалоговом окне редактора коллекции EnvironmentVariables нажмите кнопку "Добавить".

    Снимок экрана: область редактора коллекции переменных среды.

  7. Введите следующие сведения и нажмите кнопку "ОК".

    • Введите "PHP_FCGI_MAX_REQUESTS" для имени.

    • Введите значение 10000.

      Снимок экрана: область редактора коллекции переменных среды. Выделен P P F C G I.

  8. Нажмите кнопку "ОК ", чтобы закрыть диалоговое окно "Добавить приложение FastCGI".

Настройка

Элемент можно настроить <application> на уровне сервера в файле конфигурации ApplicationHost.config или на уровне сайта, на уровне приложения или на уровне каталога в файле web.config.

Атрибуты

Атрибут Description
activityTimeout Необязательный атрибут uint.

Указывает максимальное время в секундах, которое может занять процесс FastCGI. Допустимые значения находятся в диапазоне от 10 до 3600.

Значение по умолчанию в IIS 7.0 — 30значение 70по умолчанию для IIS 7.5.
arguments Необязательный строковый атрибут.

Задает аргументы командной строки для процесса FastCGI.
flushNamedPipe Необязательный атрибут типа Boolean .

Указывает, удаляются ли именованные каналы в конце каждого запроса. Это свойство применяется только при использовании протокола именованных каналов.

Значение по умолчанию — false.
fullPath Обязательный строковый атрибут.

Указывает полный путь к процессу FastCGI.
idleTimeout Необязательный атрибут uint.

Указывает максимальное время(в секундах), которое может быть простой процесс FastCGI перед завершением процесса. Допустимые значения находятся в диапазоне от 10 до 604800.

Значение по умолчанию — 300.
instanceMaxRequests Необязательный атрибут uint.

Указывает максимальное количество запросов, которые могут обрабатываться каждым рабочим процессом FastCGI перед перезапуском. Допустимые значения находятся в диапазоне от 1 до 100000000.

Значение по умолчанию — 200.
maxInstances Необязательный атрибут uint.

Указывает максимальное количество рабочих процессов FastCGI, которые можно запустить в пуле приложений. Допустимые значения находятся в диапазоне от 0 до 10000.

Значение по умолчанию — 0.
monitorChangesTo Атрибут строки параметра.

Указывает полный путь к файлу для отслеживания изменений. При обнаружении изменений в файле IIS завершит работу и перезагрузит приложение FastCGI, указанное в атрибуте fullPath .

Примечание. Этот атрибут был добавлен в IIS 7.5.

Нет значения по умолчанию.
protocol Необязательный атрибут перечисления.

Указывает механизм транспорта, используемый для взаимодействия с процессом FastCGI.

Атрибут протокола может быть одним из следующих возможных значений:
значение Описание
NamedPipe Протокол именованного канала будет использоваться для взаимодействия с рабочим процессом FastCGI.
Tcp Протокол TCP будет использоваться для взаимодействия с рабочим процессом FastCGI.
Значение по умолчанию — NamedPipe.
queueLength Необязательный атрибут uint.

Указывает максимальное количество запросов, которые могут быть в очереди для пула процессов FastCGI. Допустимые значения находятся в диапазоне от 1 до 100000000.

Значение по умолчанию — 1000.
requestTimeout Необязательный атрибут uint.

Указывает максимальное время в секундах, которое может занять запрос процесса FastCGI. Допустимые значения находятся в диапазоне от 10 до 604800.

Значение по умолчанию — 90.
signalBeforeTerminateSeconds Необязательный атрибут uint.

Указывает время ожидания IIS после того, как СЛУЖБА IIS сигнализирует приложению FastCGI о завершении работы. Если этот атрибут имеет значение больше нуля, IIS создаст наследуемое событие и передает значение дескриптора для события процессу FastCGI в качестве значения переменной _FCGI_SHUTDOWN_EVENT_ среды.

Примечание. Этот атрибут был добавлен в IIS 7.5.

Значение по умолчанию — 0.
stderrMode Необязательный атрибут перечисления.

Указывает поведение, которое службы IIS будут использовать для ошибок, возвращаемых приложениями FastCGI в потоке STDERR.

Примечание. Этот атрибут был добавлен в IIS 7.5.

Атрибут stderrMode может быть одним из следующих возможных значений:
значение Описание
ReturnStdErrIn500 Указывает, что IIS вернет ошибку HTTP 500 и отобразит содержимое в потоке STDERR клиенту. (Примечание. Это соответствует поведению IIS 7.0.)

Числовое значение равно 0.
ReturnGeneric500 Указывает, что IIS вернет клиенту универсальную ошибку HTTP 500. Это предотвращает возврат содержимого в потоке STDERR клиенту.

Числовое значение равно 1.
IgnoreAndReturn200 Указывает, что СЛУЖБЫ IIS игнорируют текст в потоке STDERR и возвращают ошибку HTTP 200 и возвращают содержимое потока STDOUT клиенту.

Числовое значение равно 2.
TerminateProcess Указывает, что СЛУЖБЫ IIS завершают процесс FastCGI и возвращают клиенту универсальную ошибку HTTP 500.

Числовое значение равно 3.
Значение по умолчанию — ReturnStdErrIn500.

Дочерние элементы

Элемент Description
environmentVariables Необязательный элемент.

Указывает коллекцию переменных среды, которые IIS передает приложению FastCGI.

Образец конфигурации

Следующий пример конфигурации добавляет приложение FastCGI для PHP, задает атрибут instanceMaxRequests значение "10000" и задает для переменной среды PHP_FCGI_MAX_REQUESTS значение "10000".

<fastCgi>
   <application fullPath="C:\PHP\php-cgi.exe"
         arguments=""
         maxInstances="4"
         idleTimeout="300"
         activityTimeout="30"
         requestTimeout="90"
         instanceMaxRequests="10000"
         protocol="NamedPipe"
         flushNamedPipe="false">
      <environmentVariables>
         <environmentVariable
            name="PHP_FCGI_MAX_REQUESTS"
            value="10000" />
      </environmentVariables>
   </application>
</fastCgi>

Примечание.

Для PHP значение переменной среды PHP_FCGI_MAX_REQUESTS должно быть числом, которое меньше или равно значению, заданному атрибутом instanceMaxRequests элемента FastCGI <application> .

Следующий пример конфигурации добавляет глобальное сопоставление обработчика FastCGI для PHP-файлов в IIS и указывает полный путь к исполняемому файлу FastCGI.

<configuration>
   <location path="" overrideMode="Allow">
      <system.webServer>
         <handlers>
            <add name="PHP-FastCGI"
                path="*.php"
                verb="GET,HEAD,POST"
                modules="FastCgiModule"
                scriptProcessor="C:\PHP\php-cgi.exe"
                resourceType="Either"
                requireAccess="Script" />
         </handlers>
      </system.webServer>
   </location>
</configuration>

Примечание.

Параметры FastCGI можно настроить для каждого сайта с помощью специально отформатированного приложения FastCGI и сопоставления обработчиков, которые различаются путем сопоставления атрибутов fullPath и аргументов для <application> элемента с соответствующим атрибутом scriptProcessor в <handlers> сопоставлении процесса FastCGI. Чтобы создать эти сопоставления, параметры в атрибутах fullPath и аргументах элемента <application> должны быть добавлены в атрибут scriptProcessor в <handlers> сопоставлении для процесса FastCGI и разделены символом "|". Это сочетание служит уникальным ключом для каждого приложения FastCGI. Например, в следующем фрагменте конфигурации показаны два примера <элементов fastCgi>/<application> и соответствующие <сопоставления обработчиков> для двух обработчиков PHP для отдельных сайтов:

<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>

<system.webServer>
   <handlers accessPolicy="Read, Script"> 
      <add name="PHP via FastCGI 1"
         path="*.php"
         verb="*"
         modules="FastCgiModule"
         scriptProcessor="C:\PHP\php-cgi.exe|-d open_basedir=C:\Websites\Website1"
         resourceType="Unspecified"
         requireAccess="Script" />
      <add name="PHP via FastCGI 2"
         path="*.php"
         verb="*"
         modules="FastCgiModule"
         scriptProcessor="C:\PHP\php-cgi.exe|-d open_basedir=C:\Websites\Website2"
         resourceType="Unspecified"
         requireAccess="Script" />
</handlers>
</system.webServer>

Пример кода

В следующих примерах кода добавьте приложение FastCGI для PHP, задайте для атрибута instanceMaxRequests значение "10000" и задайте для переменной среды PHP_FCGI_MAX_REQUESTS значение "10000". Каждый пример также добавляет глобальное сопоставление обработчика FastCGI для PHP-файлов в IIS и указывает полный путь к исполняемому файлу FastCGI.

Appcmd.exe

appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='C:\PHP\php-cgi.exe',arguments='',maxInstances='4',idleTimeout='300',activityTimeout='30',requestTimeout='90',instanceMaxRequests='10000',protocol='NamedPipe',flushNamedPipe='False']" /commit:apphost

appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='C:\PHP\php-cgi.exe'].environmentVariables.[name='PHP_FCGI_MAX_REQUESTS',value='10000']" /commit:apphost

appcmd.exe set config -section:system.webServer/handlers /+"[name='PHP-FastCGI',path='*.php',verb='GET,HEAD,POST',modules='FastCgiModule',scriptProcessor='C:\PHP\php-cgi.exe',resourceType='Either',requireAccess='Script']" /commit:apphost

Примечание.

При использовании AppCmd.exe для настройки этих параметров необходимо задать параметр apphost фиксации. При этом параметры конфигурации фиксируются в соответствующем разделе расположения в файле ApplicationHost.config.

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
         Configuration config = serverManager.GetApplicationHostConfiguration();

         ConfigurationSection fastCgiSection = config.GetSection("system.webServer/fastCgi");
         ConfigurationElementCollection fastCgiCollection = fastCgiSection.GetCollection();
         ConfigurationElement applicationElement = fastCgiCollection.CreateElement("application");
         applicationElement["fullPath"] = @"C:\PHP\php-cgi.exe";
         applicationElement["arguments"] = @"";
         applicationElement["maxInstances"] = 4;
         applicationElement["idleTimeout"] = 300;
         applicationElement["activityTimeout"] = 30;
         applicationElement["requestTimeout"] = 90;
         applicationElement["instanceMaxRequests"] = 10000;
         applicationElement["protocol"] = @"NamedPipe";
         applicationElement["flushNamedPipe"] = false;

         ConfigurationElementCollection environmentVariablesCollection = applicationElement.GetCollection("environmentVariables");
         ConfigurationElement environmentVariableElement = environmentVariablesCollection.CreateElement("environmentVariable");
         environmentVariableElement["name"] = @"PHP_FCGI_MAX_REQUESTS";
         environmentVariableElement["value"] = @"10000";
         environmentVariablesCollection.Add(environmentVariableElement);
         fastCgiCollection.Add(applicationElement);

         ConfigurationSection handlersSection = config.GetSection("system.webServer/handlers");
         ConfigurationElementCollection handlersCollection = handlersSection.GetCollection();
         ConfigurationElement addElement = handlersCollection.CreateElement("add");
         addElement["name"] = @"PHP-FastCGI";
         addElement["path"] = @"*.php";
         addElement["verb"] = @"GET,HEAD,POST";
         addElement["modules"] = @"FastCgiModule";
         addElement["scriptProcessor"] = @"C:\PHP\php-cgi.exe";
         addElement["resourceType"] = @"Either";
         addElement["requireAccess"] = @"Script";
         handlersCollection.AddAt(0, addElement);

         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample

   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration

      Dim fastCgiSection As ConfigurationSection = config.GetSection("system.webServer/fastCgi")
      Dim fastCgiCollection As ConfigurationElementCollection = fastCgiSection.GetCollection
      Dim applicationElement As ConfigurationElement = fastCgiCollection.CreateElement("application")
      applicationElement("fullPath") = "C:\PHP\php-cgi.exe"
      applicationElement("arguments") = ""
      applicationElement("maxInstances") = 4
      applicationElement("idleTimeout") = 300
      applicationElement("activityTimeout") = 30
      applicationElement("requestTimeout") = 90
      applicationElement("instanceMaxRequests") = 10000
      applicationElement("protocol") = "NamedPipe"
      applicationElement("flushNamedPipe") = False

      Dim environmentVariablesCollection As ConfigurationElementCollection = applicationElement.GetCollection("environmentVariables")
      Dim environmentVariableElement As ConfigurationElement = environmentVariablesCollection.CreateElement("environmentVariable")
      environmentVariableElement("name") = "PHP_FCGI_MAX_REQUESTS"
      environmentVariableElement("value") = "10000"
      environmentVariablesCollection.Add(environmentVariableElement)
      fastCgiCollection.Add(applicationElement)

      Dim handlersSection As ConfigurationSection = config.GetSection("system.webServer/handlers")
      Dim handlersCollection As ConfigurationElementCollection = handlersSection.GetCollection
      Dim addElement As ConfigurationElement = handlersCollection.CreateElement("add")
      addElement("name") = "PHP-FastCGI"
      addElement("path") = "*.php"
      addElement("verb") = "GET,HEAD,POST"
      addElement("modules") = "FastCgiModule"
      addElement("scriptProcessor") = "C:\PHP\php-cgi.exe"
      addElement("resourceType") = "Either"
      addElement("requireAccess") = "Script"
      handlersCollection.AddAt(0, addElement)

      serverManager.CommitChanges()
   End Sub

End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";

var fastCgiSection = adminManager.GetAdminSection("system.webServer/fastCgi", "MACHINE/WEBROOT/APPHOST");
var fastCgiCollection = fastCgiSection.Collection;
var applicationElement = fastCgiCollection.CreateNewElement("application");
applicationElement.Properties.Item("fullPath").Value = "C:\\PHP\\php-cgi.exe";
applicationElement.Properties.Item("arguments").Value = "";
applicationElement.Properties.Item("maxInstances").Value = 4;
applicationElement.Properties.Item("idleTimeout").Value = 300;
applicationElement.Properties.Item("activityTimeout").Value = 30;
applicationElement.Properties.Item("requestTimeout").Value = 90;
applicationElement.Properties.Item("instanceMaxRequests").Value = 10000;
applicationElement.Properties.Item("protocol").Value = "NamedPipe";
applicationElement.Properties.Item("queueLength").Value = 1000;
applicationElement.Properties.Item("flushNamedPipe").Value = false;
applicationElement.Properties.Item("rapidFailsPerMinute").Value = 10;

var environmentVariablesCollection = applicationElement.ChildElements.Item("environmentVariables").Collection;
var environmentVariableElement = environmentVariablesCollection.CreateNewElement("environmentVariable");
environmentVariableElement.Properties.Item("name").Value = "PHP_FCGI_MAX_REQUESTS";
environmentVariableElement.Properties.Item("value").Value = "10000";
environmentVariablesCollection.AddElement(environmentVariableElement);
fastCgiCollection.AddElement(applicationElement);

var handlersSection = adminManager.GetAdminSection("system.webServer/handlers", "MACHINE/WEBROOT/APPHOST");
var handlersCollection = handlersSection.Collection;
var addElement = handlersCollection.CreateNewElement("add");
addElement.Properties.Item("name").Value = "PHP-FastCGI";
addElement.Properties.Item("path").Value = "*.php";
addElement.Properties.Item("verb").Value = "GET,HEAD,POST";
addElement.Properties.Item("modules").Value = "FastCgiModule";
addElement.Properties.Item("scriptProcessor").Value = "C:\\PHP\\php-cgi.exe";
addElement.Properties.Item("resourceType").Value = "Either";
addElement.Properties.Item("requireAccess").Value = "Script";
handlersCollection.AddElement(addElement, 0);

adminManager.CommitChanges();

VBScript

Set adminManager = WScript.CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"

Set fastCgiSection = adminManager.GetAdminSection("system.webServer/fastCgi", "MACHINE/WEBROOT/APPHOST")
Set fastCgiCollection = fastCgiSection.Collection
Set applicationElement = fastCgiCollection.CreateNewElement("application")
applicationElement.Properties.Item("fullPath").Value = "C:\PHP\php-cgi.exe"
applicationElement.Properties.Item("arguments").Value = ""
applicationElement.Properties.Item("maxInstances").Value = 4
applicationElement.Properties.Item("idleTimeout").Value = 300
applicationElement.Properties.Item("activityTimeout").Value = 30
applicationElement.Properties.Item("requestTimeout").Value = 90
applicationElement.Properties.Item("instanceMaxRequests").Value = 10000
applicationElement.Properties.Item("protocol").Value = "NamedPipe"
applicationElement.Properties.Item("queueLength").Value = 1000
applicationElement.Properties.Item("flushNamedPipe").Value = false
applicationElement.Properties.Item("rapidFailsPerMinute").Value = 10

Set environmentVariablesCollection = applicationElement.ChildElements.Item("environmentVariables").Collection
Set environmentVariableElement = environmentVariablesCollection.CreateNewElement("environmentVariable")
environmentVariableElement.Properties.Item("name").Value = "PHP_FCGI_MAX_REQUESTS"
environmentVariableElement.Properties.Item("value").Value = "10000"
environmentVariablesCollection.AddElement(environmentVariableElement)
Call fastCgiCollection.AddElement(applicationElement)

Set handlersSection = adminManager.GetAdminSection("system.webServer/handlers", "MACHINE/WEBROOT/APPHOST")
Set handlersCollection = handlersSection.Collection
Set addElement = handlersCollection.CreateNewElement("add")
addElement.Properties.Item("name").Value = "PHP-FastCGI"
addElement.Properties.Item("path").Value = "*.php"
addElement.Properties.Item("verb").Value = "GET,HEAD,POST"
addElement.Properties.Item("modules").Value = "FastCgiModule"
addElement.Properties.Item("scriptProcessor").Value = "C:\PHP\php-cgi.exe"
addElement.Properties.Item("resourceType").Value = "Either"
addElement.Properties.Item("requireAccess").Value = "Script"
Call handlersCollection.AddElement(addElement, 0)

adminManager.CommitChanges()