FastCGI 应用程序 <application>

概述

FastCGI 的 <application> 元素包含特定 FastCGI 进程池定义的配置设置。 当使用 FastCGI 时,IIS 将使用 <application> 元素的 maxInstances 属性中的值来确定可以在进程池中运行的 FastCGI 进程的数量。

最简单的 FastCGI 应用程序池定义要求在 <application> 元素中包含 fullPath 属性,以定义要用于特定应用程序框架的二进制文件。 对于 PHP 框架,请将 fullPath 属性设置为 PHP 二进制文件的目录和文件名。

其他属性是可选的,可用于配置许多其他参数。 其中包括 FastCGI 工作进程在回收之前可以处理的最大请求数、应用程序池的最大工作进程数,以及 FastCGI 请求可以花费的最大时间。

注意

要使用 FastCGI 处理请求,必须先将路径和特定文件扩展名映射到 FastCGI 模块,并将目标 FastCGI 进程指定为脚本处理器。

IIS 7.5 中的新增功能

IIS 7.5 在 <fastCgi>/<application> 元素中增加了以下属性:

  • monitorChangesTo 属性可用于指定一个文件来监视可能影响 FastCGI 应用程序行为的更改。 例如,如果您使用 PHP 框架,则可以在 monitorChangesTo 属性中指定文件的完整路径,从而将 IIS 配置为监视 PHP.INI 文件的更改。
  • stderrMode 属性指定 IIS 7 如何处理通过 STDERR 流从 FastCGI 应用程序返回的错误。
  • signalBeforeTerminateSeconds 属性可用于将 IIS 配置为等待指定时间段,此后 IIS 会向 FastCGI 应用程序发出信号,表明自己需要关闭。 这样,FastCGI 应用程序就可以在 IIS 终止进程之前清理任何设置。

兼容性

版本 说明
IIS 10.0 <application> 元素在 IIS 10.0 中未进行修改。
IIS 8.5 <application> 元素在 IIS 8.5 中未进行修改。
IIS 8.0 在 IIS 8.0 中,maxInstances 属性的默认值已从 4 改为 0
IIS 7.5 <fastCgi> 集合的 <application> 元素在 IIS 7.5 中更新了 monitorChangesTostderrModesignalBeforeTerminateSeconds 属性。
IIS 7.0 IIS 7.0 中引入了 <fastCgi> 集合的 <application> 元素。
IIS 6.0 空值

安装

若要使用 FastCGI 环境,必须先安装 CGI 角色服务。 在安装过程中,会同时在 <globalModules><modules> 元素中注册通用网关接口 (CGI) 角色服务。 无需执行任何其他步骤即可安装 FastCGI 环境。

Windows Server 2012 或 Windows Server 2012 R2

  1. 在任务栏上,单击 “服务器管理器”。
  2. 在“服务器管理器”中,单击“管理”菜单,然后单击“添加角色和功能”。
  3. 在“添加角色和功能”向导中,单击“下一步”。 选择安装类型,然后单击“下一步”。 选择目标服务器,然后单击“下一步”。
  4. 在“服务器角色”页上,依次展开“Web 服务器 (IIS)”、“Web 服务器”和“应用程序开发”,然后选择“CGI”。 单击 “下一步”
    “服务器角色”对话框的屏幕截图。C G I 已检查并突出显示。
  5. 在“选择功能”页上,单击“下一步”
  6. “确认安装选择”页上,单击“安装”
  7. 在“结果” 页面中单击“关闭”

Windows 8 或 Windows 8.1

  1. 在“开始”屏幕上,将指针一直移动到左下角,右键单击“开始”按钮,然后单击“控制面板”
  2. 在“控制面板”中,单击“程序与功能”,然后单击“打开或关闭 Windows 功能”。
  3. 依次展开“Internet 信息服务”、“万维网服务”和“应用程序开发功能”,然后选择“CGI”。
    “窗口功能”对话框的屏幕截图。在展开的菜单中选择 C G I。
  4. 单击“确定”。
  5. 单击“关闭” 。

Windows Server 2008 或 Windows Server 2008 R2

  1. 在任务栏上,单击“开始”,指向“管理工具”,然后单击“服务器管理器”。
  2. 在“服务器管理器”层次结构窗格中,展开“角色”,然后单击“Web 服务器(IIS)”。
  3. 在“Web 服务器(IIS)”窗格中,滚动到“角色服务”部分,然后单击“添加角色服务”。
  4. 在“添加角色服务向导”的“选择角色服务”页上,选择“CGI”,然后单击“下一步”。
    “角色服务”页的屏幕截图。突出显示了 C G I。
  5. “确认安装选择”页中,单击“安装”
  6. 在“结果” 页面中单击“关闭”

Windows Vista 或 Windows 7

  1. 在任务栏上,单击“开始”,然后单击“控制面板”。
  2. 在“控制面板”中,单击“程序与功能”,然后单击“打开或关闭 Windows 功能”。
  3. 展开“Internet Information Services”,选择“CGI”,然后单击“确定”。
    Windows 功能对话框的屏幕截图。突出显示了 C G I。

操作方式

IIS 7.0 用户请注意,本节中的某些步骤可能需要安装 Microsoft Administration Pack for IIS 7.0,其中包括 FastCGI 设置用户界面。 若要安装 Microsoft Administration Pack for IIS 7.0,请参阅以下 URL:

如何为 PHP 创建全局 FastCGI 处理程序映射

注意

在执行以下过程之前,您必须已经安装了将执行您指定的文件路径或文件扩展名的二进制文件。 此示例使用 www.php.net 中提供的 PHP 实现。

  1. 打开 Internet Information Services (IIS) 管理器:

    • 如果使用的是 Windows Server 2012 或 Windows Server 2012 R2:

      • 在任务栏上,单击“服务器管理器”,单击“工具”,然后单击“Internet Information Services (IIS)管理器”
    • 如果使用的是 Windows 8 或 Windows 8.1:

      • 按住 Windows 键,按字母 X,然后单击“控制面板”。
      • 单击“管理工具”,然后双击“Internet 信息服务(IIS)管理器”。
    • 如果使用的是 Windows Server 2008 或 Windows Server 2008 R2:

      • 在任务栏上,单击“开始”,指向“管理工具”,然后单击“Internet Information Services (IIS)管理器”
    • 如果使用的是 Windows Vista 或 Windows 7:

      • 在任务栏上,单击“开始”,然后单击“控制面板”。
      • 双击“管理工具”,然后双击“Internet 信息服务(IIS)管理器”。
  2. 在“连接”窗格中,单击要为其配置 FastCGI 处理程序映射的服务器名称。

  3. 在“开始”窗格中,双击“处理程序映射”。
    默认网站主页的屏幕截图。突出显示处理程序映射的图标。

  4. 在“操作”窗格中,单击“添加模块映射”
    显示“处理程序映射”页的“I S 管理器”窗口的屏幕截图。

  5. 输入以下信息:

    • 在“请求路径”文本框中输入文件扩展名。 例如,“*.php”。

    • 在“模块”下拉列表中单击 FastCgiModule。

    • 在“可执行文件”框中输入脚本引擎的路径。 例如,“C:\PHP\php-cgi.exe”。

    • 在“名称”框中输入处理程序映射的唯一名称。 例如,“PHP-FastCGI”。

      “添加模块映射”对话框的屏幕截图。

    • 单击“请求限制”

    • 选择“仅当请求映射到以下对象时才调用处理程序”。

    • 单击以选择“文件”或“文件夹”选项。

    • 单击“确定”。

      “请求限制”对话框的屏幕截图。

  6. 单击“确定”。

  7. 如果“添加模块映射”对话框中系统提示创建 FastCGI 应用程序,请单击“是”。

    “添加模块映射信息”对话框的屏幕截图。

    注意

    这将为刚刚创建的处理程序映射自动创建 FastCGI 应用程序。 如果选择“否”,则可以稍后手动创建 FastCGI 应用程序。

如何为 PHP 创建 FastCGI 应用程序

注意

在执行以下过程之前,您必须已经安装了将执行您指定的文件路径或文件扩展名的二进制文件。 此示例使用 www.php.net 中提供的 PHP 实现。

注意

添加 FastCGI 应用程序后,系统并不会自动添加处理程序映射。 为此,请按照本文的如何为 PHP 创建全局 FastCGI 处理程序映射部分中的步骤操作。

  1. 打开 Internet Information Services (IIS) 管理器:

    • 如果使用的是 Windows Server 2012 或 Windows Server 2012 R2:

      • 在任务栏上,单击“服务器管理器”,单击“工具”,然后单击“Internet Information Services (IIS)管理器”
    • 如果使用的是 Windows 8 或 Windows 8.1:

      • 按住 Windows 键,按字母 X,然后单击“控制面板”。
      • 单击“管理工具”,然后双击“Internet 信息服务(IIS)管理器”。
    • 如果使用的是 Windows Server 2008 或 Windows Server 2008 R2:

      • 在任务栏上,单击“开始”,指向“管理工具”,然后单击“Internet Information Services (IIS)管理器”
    • 如果使用的是 Windows Vista 或 Windows 7:

      • 在任务栏上,单击“开始”,然后单击“控制面板”。
      • 双击“管理工具”,然后双击“Internet 信息服务(IIS)管理器”。
  2. 在“连接”窗格中,单击要为其配置 FastCGI 设置的服务器名称。

  3. 在“主页”窗格中,双击“FastCGI 设置”。

    服务器主页的屏幕截图。“快速 C G I 设置”突出显示。

  4. 在“操作”窗格中,单击“添加应用程序”。

    I S Manager 中“快速 C G I 设置”页的屏幕截图。

  5. 在“添加 FastCGI 应用程序”对话框中,输入以下信息:

    • 在“完整路径”框中输入脚本引擎的路径。 例如,“C:\PHP\php-cgi.exe”。

    • 输入 FastCGI 应用程序的最大请求数。

      注意

      对于 PHP,此数字必须小于或等于 PHP 环境的最大请求数(使用 PHP_FCGI_MAX_REQUESTS 环境变量配置)。

      “添加快速 C G I 应用程序”对话框的屏幕截图。

  6. 单击 EnvironmentVariables 旁边的省略号 (...),打开环境变量集合编辑器。

  7. 在“EnvironmentVariables 集合编辑器”对话框中,单击“添加”。

    “环境变量集合编辑器”对话框的屏幕截图。

  8. 输入以下信息,然后单击“确定”。

    • 在“名称”中,输入“PHP_FCGI_MAX_REQUESTS”。

    • 在“值”中,输入“10000”。

      “环境变量集合编辑器”对话框的屏幕截图。“成员”字段中突出显示了 P H P F C G G I 最大请求。

  9. 单击“确定”关闭“添加 FastCGI 应用程序”对话框。

如何为 PHP 添加 FastCGI 环境变量

注意

在执行以下过程之前,您必须已经安装了将执行您指定的文件路径或文件扩展名的二进制文件。 此示例使用 www.php.net 中提供的 PHP 实现。

  1. 打开 Internet Information Services (IIS) 管理器:

    • 如果使用的是 Windows Server 2012 或 Windows Server 2012 R2:

      • 在任务栏上,单击“服务器管理器”,单击“工具”,然后单击“Internet Information Services (IIS)管理器”
    • 如果使用的是 Windows 8 或 Windows 8.1:

      • 按住 Windows 键,按字母 X,然后单击“控制面板”。
      • 单击“管理工具”,然后双击“Internet 信息服务(IIS)管理器”。
    • 如果使用的是 Windows Server 2008 或 Windows Server 2008 R2:

      • 在任务栏上,单击“开始”,指向“管理工具”,然后单击“Internet Information Services (IIS)管理器”
    • 如果使用的是 Windows Vista 或 Windows 7:

      • 在任务栏上,单击“开始”,然后单击“控制面板”。
      • 双击“管理工具”,然后双击“Internet 信息服务(IIS)管理器”。
  2. 在“连接”窗格中,单击要为其配置 FastCGI 设置的服务器名称。

  3. 在“主页”窗格中,双击“FastCGI 设置”。

    I S 管理器中的“服务器主页”的屏幕截图。突出显示了 Fast C G I 设置的 THe 图标。

  4. 在“FastCGI 设置”窗格中突出显示 PHP 应用程序,然后在“操作”窗格中单击“编辑”。

    I S Manager 中“快速 C G I 设置”页的屏幕截图。

  5. 在“编辑 FastCGI 应用程序”对话框中,单击 EnvironmentVariables 旁边的省略号 (...) 以打开环境变量集合编辑器。

    “编辑快速 C G I 应用程序”对话框的屏幕截图。

  6. 在“EnvironmentVariables 集合编辑器”对话框中,单击“添加”。

    “环境变量集合编辑器”窗格的屏幕截图。

  7. 输入以下信息,然后单击“确定”。

    • 在“名称”中,输入“PHP_FCGI_MAX_REQUESTS”。

    • 在“值”中,输入“10000”。

      “环境变量集合编辑器”窗格的屏幕截图。P H P F C G I 突出显示。

  8. 单击“确定”关闭“添加 FastCGI 应用程序”对话框。

配置

可以使用 ApplicationHost.config 文件在站点级别、应用程序级别配置 <application> 元素,也可以使用 Web.config 文件在目录级别配置。

特性

属性 说明
activityTimeout 可选 uint 属性。

指定处理 FastCGI 进程可以花费的最长时间(以秒为单位)。 可接受 10 到 3600 范围内的值。

IIS 7.0 中的默认值为 30;IIS 7.5 的默认值为 70
arguments 可选的字符串属性。

指定 FastCGI 进程的命令行参数。
flushNamedPipe 可选的 Boolean 属性。

指定是否在每个请求末尾刷新命名管道。 此属性仅在使用命名管道协议时适用。

默认值为 false
fullPath 必需的字符串属性。

指定 FastCGI 进程的完整路径。
idleTimeout 可选 uint 属性。

指定在关闭进程之前 FastCGI 进程可以空闲的最大时间(以秒为单位)。 可接受 10 到 604800 之间的值。

默认值为 300
instanceMaxRequests 可选 uint 属性。

指定每个 FastCGI 工作进程在被回收之前可以处理的最大请求数。 可接受 1 到 10000000 之间的值。

默认值为 200
maxInstances 可选 uint 属性。

指定可在应用程序池中启动的 FastCGI 工作进程的最大数目。 可接受 0 到 10000 范围内的值。

默认值为 0
monitorChangesTo 可选的字符串属性。

指定要监视更改的文件的完整路径。 检测到对文件的更改后,IIS 将终止并重启属性 fullPath 中指定的 FastCGI 应用程序。

注:IIS 7.5 中添加了此属性。

没有默认值。
protocol 可选枚举属性。

指定用于与 FastCGI 进程通信的传输机制。

protocol 属性可为以下值之一:
说明
NamedPipe 命名管道协议将用于与 FastCGI 工作进程通信。
Tcp TCP 协议将用于与 FastCGI 工作进程通信。
默认值为 NamedPipe
queueLength 可选 uint 属性。

指定可为 FastCGI 进程池排队的最大请求数。 可接受 1 到 10000000 之间的值。

默认值为 1000
requestTimeout 可选 uint 属性。

指定 FastCGI 进程请求可以花费的最长时间(以秒为单位)。 可接受 10 到 604800 之间的值。

默认值为 90
signalBeforeTerminateSeconds 可选 uint 属性。

指定在 IIS 在向 FastCGI 应用程序发出自身需要关闭的信号后,IIS 的等待时间。 当此属性设置为大于零的值时,IIS 将创建一个可继承的事件,并将该事件的句柄值作为 _FCGI_SHUTDOWN_EVENT_ 环境变量的值传递给 FastCGI 进程。

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

子元素

元素 说明
environmentVariables 可选元素。

指定 IIS 将传递给 FastCGI 应用程序的环境变量集合。

配置示例

以下配置示例为 PHP 添加了 FastCGI 应用程序,将 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 环境变量的值必须小于或等于 FastCGI 的 <application> 元素的 instanceMaxRequests 属性指定的值。

以下配置示例将 PHP 文件的全局 FastCGI 处理程序映射添加到 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 设置,这些映射的区分方法如下:将 <application> 元素的 fullPatharguments 属性与 FastCGI 进程中 <handlers> 映射的对应 scriptProcessor 属性进行匹配。 若要创建这些映射,必须将 <application> 元素的 fullPatharguments 属性中的设置添加到 FastCGI 进程的 <handlers> 映射中的 scriptProcessor 属性,并用管道“|”字符分隔。 此组合用作每个 FastCGI 应用程序的唯一键。 例如,以下配置摘录显示了两个特定于站点的 PHP 处理程序的两个 <fastCgi>/<application> 元素及其对应<处理程序>映射:

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

代码示例

以下代码示例为 PHP 添加 FastCGI 应用程序,将 instanceMaxRequests 属性设置为“10000”,将 PHP_FCGI_MAX_REQUESTS 环境变量设置为“10000”。每个示例还将 PHP 文件的全局 FastCGI 处理程序映射添加到 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 配置这些设置时,必须确保将 commit 参数设置为 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()