Share via


FastCGI <fastCgi>

Información general

El elemento <fastCgi> contiene una colección de elementos <application>, cada uno de los cuales crea una definición de grupo de aplicaciones FastCGI. Internet Information Services (IIS) 7 incluye el componente FastCGI. Este componente proporciona mejor confiabilidad y rendimiento y le permite ejecutar el marco de trabajo de aplicaciones PHP y otros marcos de trabajo de aplicaciones web en IIS 7.

La definición más sencilla del grupo de aplicaciones de FastCGI requiere que incluya el atributo fullPath en un elemento <application> para definir los archivos binarios que se usarán para el marco de trabajo de la aplicación específico. Para el marco PHP, establezca el atributo fullPath en el directorio y el nombre de archivo de los archivos binarios PHP.

Otros atributos son opcionales y permiten configurar varios otros parámetros. Estos incluyen el número máximo de solicitudes que un proceso de trabajo de FastCGI puede procesar antes de reciclarse, el número máximo de procesos de trabajo para un grupo de aplicaciones y la cantidad máxima de tiempo que puede tardar una solicitud de FastCGI.

Nota:

Para procesar solicitudes mediante FastCGI, primero debe asignar la ruta de acceso y las extensiones de nombre de archivo específicas al módulo FastCGI y especificar el proceso de FastCGI de destino como procesador de scripts.

Novedades de IIS 7.5

IIS 7.5 agregó los atributos siguientes al elemento <fastCgi>/<application>:

  • El atributo monitorChangesTo permite especificar un archivo para supervisar los cambios que podrían afectar al comportamiento de una aplicación FastCGI. Por ejemplo, si usa el marco PHP, puede configurar IIS para supervisar los cambios en el archivo PHP.INI especificando la ruta de acceso completa al archivo en el atributo monitorChangesTo.
  • El atributo stderrMode especifica cómo IIS 7 controlará los errores que se devuelven desde una aplicación FastCGI mediante la secuencia STDERR.
  • El atributo signalBeforeTerminateSeconds le permite configurar IIS para esperar un período de tiempo especificado después de que IIS señale una aplicación FastCGI que necesita apagar. Esto permite que una aplicación FastCGI limpie cualquier configuración antes de que IIS finalice el proceso.

Compatibilidad

Versión Notas
IIS 10.0 El elemento <fastCgi> no se modificó en IIS 10.0.
IIS 8.5 El elemento <fastCgi> no se modificó en IIS 8.5.
IIS 8.0 El elemento <fastCgi> no se modificó en IIS 8.0.
IIS 7.5 El elemento <application> de la colección <fastCgi> se actualizó en IIS 7.5 con los atributos monitorChangesTo, stderrMode y signalBeforeTerminateSeconds.
IIS 7.0 El elemento <fastCgi> se introdujo en IIS 7.0.
IIS 6,0 N/D

Configuración

Para usar el entorno FastCGI, primero debe instalar el servicio de rol de CGI. El proceso de instalación registra el servicio de rol de la interfaz CGI en los elementos <globalModules> y <modules>. No es necesario realizar ningún otro paso para instalar el entorno FastCGI.

Windows Server 2012 o Windows Server 2012 R2

  1. En la barra de tareas, haga clic en Administrador del servidor.
  2. En Administrador del servidor, haga clic en el menú Administrar y, después, haga clic en Agregar roles y características.
  3. En el asistente para Agregar roles y características, haga clic en Siguiente. Seleccione el tipo de instalación y haga clic en Siguiente. Seleccione el servidor de destino y haga clic en Siguiente.
  4. En la página Roles de servidor, expanda Servidor web (IIS), expanda Servidor web, expanda Desarrollo de aplicaciones y, a continuación, seleccione CGI. Haga clic en Next.
    Captura de pantalla de C G I seleccionada en una interfaz de Windows Server 2012.
  5. En la página Seleccionar características, haz clic en Siguiente.
  6. En la página Confirmar selecciones de instalación, haga clic en Instalar.
  7. En la página Resultados , haga clic en Cerrar.

Windows 8 o Windows 8.1

  1. En la pantalla Inicio, mueva el puntero hasta la esquina inferior izquierda, haga clic con el botón derecho en el botón Inicio y, a continuación, haga clic en Panel de control.
  2. En Panel de control, haga clic en Programas y características y después en Activar o desactivar las características de Windows.
  3. Expanda sucesivamente Internet Information Services, World Wide Web Services y Características de desarrollo de aplicaciones y, a continuación, seleccione CGI.
    Captura de pantalla de C G I seleccionada en una interfaz de Windows 8.
  4. Haga clic en OK.
  5. Haga clic en Cerrar.

Windows Server 2008 o Windows Server 2008 R2

  1. En la barra de tareas, haga clic en Inicio, seleccione Herramientas administrativas y, luego, haga clic en Administrador del servidor.
  2. En el panel de jerarquía del Administrador del servidor, expanda Roles y, luego, haga clic en Servidor web (IIS).
  3. En el panel Servidor web (IIS), desplácese hasta la sección Servicios de rol y, luego, haga clic en Agregar servicios de rol.
  4. En la página Seleccionar servicios de rol del Asistente para agregar servicios de rol, seleccione CGI y haga clic en Siguiente.
    Captura de pantalla de C G seleccionada en una interfaz de Windows Server 2008.
  5. En la página Confirmar selecciones de instalación, haz clic en Instalar.
  6. En la página Resultados , haga clic en Cerrar.

Windows Vista o Windows 7

  1. En la barra de tareas, haga clic en Inicio y, luego, haga clic en Panel de control.
  2. En Panel de control, haga clic en Programas y características y después en Activar o desactivar las características de Windows.
  3. Expanda Internet Information Services, seleccione CGIy, a continuación, haga clic en Aceptar.
    Captura de pantalla de C G seleccionada en una interfaz de Windows Vista o Windows 7.

Procedimientos

Nota para los usuarios de IIS 7.0: Algunos de los pasos de esta sección pueden requerir que instale Administration Pack para IIS 7.0 de Microsoft, que incluye una interfaz de usuario para la configuración de FastCGI. Para instalar Microsoft Administration Pack para IIS 7.0, consulte la siguiente dirección URL:

Creación de una asignación global de controladores de FastCGI para PHP

Nota:

Para que funcione el procedimiento siguiente, ya debe haber instalado archivos binarios que ejecutarán la ruta de acceso del archivo o la extensión de nombre de archivo que especifique. En este ejemplo se usa una implementación de PHP disponible en https://www.php.net/.

  1. Abra el Administrador de Internet Information Services (IIS):

    • Si usa Windows Server 2012 o Windows Server 2012 R2:

      • En la barra de tareas, haga clic en Administrador del servidor, en Herramientas y, a continuación, en Administrador de Internet Information Services (IIS).
    • Si usa Windows 8 o Windows 8.1:

      • Mantenga presionada la tecla Windows, presione la letra X y haga clic en Panel de control.
      • En Panel de control, haga clic en Herramientas administrativas y, a continuación, haga doble clic en Administrador de Internet Information Services (IIS).
    • Si usa Windows Server 2008 o Windows Server 2008 R2:

      • En la barra de tareas, haga clic en Inicio, seleccione Herramientas administrativas y, a continuación, haga clic en Administrador de Internet Information Services (IIS).
    • Si usa Windows Vista o Windows 7:

      • En la barra de tareas, haga clic en Inicio y, luego, haga clic en Panel de control.
      • Haga doble clic en Herramientas administrativas y, a continuación, haga doble clic en Administrador de Internet Information Services (IIS).
  2. En el panel Conexiones, haga clic en el nombre del servidor para el que desea configurar asignaciones de controladores de FastCGI.

  3. En el panel Inicio, haga doble clic en Asignaciones de controlador.
    Captura de pantalla de asignaciones de controlador seleccionadas en el panel Inicio del sitio web predeterminado.

  4. En el panel Acciones , haga clic en Agregar asignación de módulo. Captura de pantalla de las asignaciones de controlador deshabilitadas y habilitadas en el Administrador de I I S.

  5. Escriba la siguiente información:

    • Escriba la extensión de nombre de archivo en el cuadro de texto Ruta de acceso de la solicitud. Por ejemplo, "*.php".

    • Haga clic en FastCgiModule en la lista desplegable Módulo.

    • Escriba la ruta de acceso al motor de scripting en el cuadro Ejecutable. Por ejemplo, "C:\PHP\php-cgi.exe".

    • En el cuadro Nombre, escriba un nombre único para la asignación de controladores. Por ejemplo, "PHP-FastCGI".

      Captura de pantalla del cuadro de diálogo Agregar asignación de módulos con las opciones especificadas.

    • Haga clic en Restricciones de solicitudes.

    • Seleccione Invocar controlador solo si la solicitud está asignada.

    • Haga clic para seleccionar la opción Archivo o carpeta.

    • Haga clic en OK.

      Captura de pantalla de la configuración de las opciones de asignación en el cuadro de diálogo Restricciones de solicitud.

  6. Haga clic en OK.

  7. Si en el cuadro de diálogo Agregar asignación de módulos se le pide que cree una aplicación FastCGI, haga clic en .

    Captura de pantalla antes de confirmar la creación de una nueva aplicación para el archivo ejecutable especificado.

    Nota:

    Esta acción crea automáticamente una aplicación FastCGI para la asignación de controladores que acaba de crear. Si elige No, puede crear manualmente una aplicación FastCGI más adelante.

Creación de una aplicación FastCGI para PHP

Nota:

Para que funcione el procedimiento siguiente, ya debe haber instalado archivos binarios que ejecutarán la ruta de acceso del archivo o la extensión de nombre de archivo que especifique. En este ejemplo se usa una implementación de PHP disponible en www.php.net.

Nota:

Agregar una aplicación FastCGI no agrega automáticamente una asignación de controladores. Para ello, debe seguir los pasos descritos en la sección Creación de una asignación global de controladores FastCGI para PHP] de este artículo.

  1. Abra el Administrador de Internet Information Services (IIS):

    • Si usa Windows Server 2012 o Windows Server 2012 R2:

      • En la barra de tareas, haga clic en Administrador del servidor, en Herramientas y, a continuación, en Administrador de Internet Information Services (IIS).
    • Si usa Windows 8 o Windows 8.1:

      • Mantenga presionada la tecla Windows, presione la letra X y haga clic en Panel de control.
      • En Panel de control, haga clic en Herramientas administrativas y, a continuación, haga doble clic en Administrador de Internet Information Services (IIS).
    • Si usa Windows Server 2008 o Windows Server 2008 R2:

      • En la barra de tareas, haga clic en Inicio, seleccione Herramientas administrativas y, a continuación, haga clic en Administrador de Internet Information Services (IIS).
    • Si usa Windows Vista o Windows 7:

      • En la barra de tareas, haga clic en Inicio y, luego, haga clic en Panel de control.
      • Haga doble clic en Herramientas administrativas y, a continuación, haga doble clic en Administrador de Internet Information Services (IIS).
  2. En el panel Conexiones, haga clic en el nombre del servidor para el que desea configurar las opciones de FastCGI.

  3. En el panel Inicio, haga doble clic en Configuración de FastCGI.
    Captura de pantalla de Fast C G I Configuración seleccionada en el panel Inicio del servidor.

  4. En el panel Acciones, haga clic en Agregar aplicación.
    Captura de pantalla de un panel de fast C G I Configuración vacío.

  5. En el cuadro de diálogo Agregar aplicación FastCGI, escriba la siguiente información:

    • Escriba la ruta de acceso al motor de scripting en el cuadro Ruta de acceso completa. Por ejemplo, "C:\PHP\php-cgi.exe".

    • Escriba el número máximo de solicitudes para la aplicación FastCGI.

      Nota:

      Con PHP, este número debe ser menor o igual que el número máximo de solicitudes en un entorno PHP, que se configura mediante la variable de entorno PHP_FCGI_MAX_REQUESTS.
      Captura de pantalla del cuadro de diálogo Agregar aplicación fast C G I con las propiedades predeterminadas de Fast C G I.

  6. Haga clic en los puntos suspensivos (...) situados junto a EnvironmentVariables para abrir el editor de colecciones de variables de entorno.

  7. En el cuadro de diálogo Editor de colecciones EnvironmentVariables, haga clic en Agregar.
    Captura de pantalla del cuadro de diálogo Editor de recopilación de variables de entorno vacío.

  8. Escriba la siguiente información y, a continuación, haga clic en Aceptar.

    • En Nombre, escriba "PHP_FCGI_MAX_REQUESTS".

    • En Valor, escriba "10000".

      Captura de pantalla de la nueva variable de la lista Miembros con las propiedades especificadas.

  9. Haga clic en Aceptar para cerrar el cuadro de diálogo Agregar aplicación FastCGI.

Adición de una variable de entorno de FastCGI para PHP

Nota:

Para que funcione el procedimiento siguiente, ya debe haber instalado archivos binarios que ejecutarán la ruta de acceso del archivo o la extensión de nombre de archivo que especifique. En este ejemplo se usa una implementación de PHP disponible en https://www.php.net/.

  1. Abra el Administrador de Internet Information Services (IIS):

    • Si usa Windows Server 2012 o Windows Server 2012 R2:

      • En la barra de tareas, haga clic en Administrador del servidor, en Herramientas y, a continuación, en Administrador de Internet Information Services (IIS).
    • Si usa Windows 8 o Windows 8.1:

      • Mantenga presionada la tecla Windows, presione la letra X y haga clic en Panel de control.
      • En Panel de control, haga clic en Herramientas administrativas y, a continuación, haga doble clic en Administrador de Internet Information Services (IIS).
    • Si usa Windows Server 2008 o Windows Server 2008 R2:

      • En la barra de tareas, haga clic en Inicio, seleccione Herramientas administrativas y, a continuación, haga clic en Administrador de Internet Information Services (IIS).
    • Si usa Windows Vista o Windows 7:

      • En la barra de tareas, haga clic en Inicio y, luego, haga clic en Panel de control.
      • Haga doble clic en Herramientas administrativas y, a continuación, haga doble clic en Administrador de Internet Information Services (IIS).
  2. En el panel Conexiones, haga clic en el nombre del servidor para el que desea configurar las opciones de FastCGI.

  3. En el panel Inicio, haga doble clic en Configuración de FastCGI.
    Captura de pantalla del icono fast C G I Configuración seleccionado en el panel Inicio del servidor.

  4. Resalte la aplicación PHP en el panel Configuración de FastCGI y, a continuación, haga clic en Editar en el panel Acciones.
    Captura de pantalla de la aplicación P H P seleccionada en el panel fast C G I Configuración.

  5. En el cuadro de diálogo Editar aplicación FastCGI, haga clic en los puntos suspensivos (...) situados junto a EnvironmentVariables para abrir el editor de colecciones de variables de entorno.
    Captura de pantalla del cuadro de diálogo Editar aplicación rápida de C G I con las opciones especificadas.

  6. En el cuadro de diálogo Editor de colecciones EnvironmentVariables, haga clic en Agregar.
    Captura de pantalla del cuadro de diálogo Editor de recopilación de variables de entorno vacío antes de agregar una nueva variable.

  7. Escriba la siguiente información y, a continuación, haga clic en Aceptar.

    • En Nombre, escriba "PHP_FCGI_MAX_REQUESTS".

    • En Valor, escriba "10000".

      Captura de pantalla después de agregar la nueva variable de entorno con las propiedades especificadas.

  8. Haga clic en Aceptar para cerrar el cuadro de diálogo Agregar aplicación FastCGI.

Configuración

Puede configurar el elemento <fastCgi> a nivel de servidor en el archivo ApplicationHost.config o a nivel de sitio, nivel de aplicación o nivel de directorio en un archivo Web.config.

Atributos

Ninguno.

Elementos secundarios

Elemento Descripción
application Elemento opcional.

Agrega una definición de grupo de procesos FastCGI a la colección de definiciones de grupo de procesos FastCGI.

Ejemplo de configuración

En el ejemplo de configuración siguiente se agrega una aplicación FastCGI para PHP, se establece el atributo instanceMaxRequests en "10000" y se establece la variable de entorno PHP_FCGI_MAX_REQUESTS en "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>

Nota:

Con PHP, el valor de la variable de entorno PHP_FCGI_MAX_REQUESTS debe ser un número menor o igual que el valor especificado por el atributo instanceMaxRequests del elemento <application> de FastCGI.

En el ejemplo de configuración siguiente se agrega una asignación global de controladores FastCGI para archivos PHP a IIS y se especifica la ruta de acceso completa a un archivo ejecutable 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>

Nota:

La configuración de FastCGI se puede establecer por sitio mediante el uso de la aplicación FastCGI con formato especial y por asignaciones de controladores, que se distinguen mediante la coincidencia de los atributos fullPath y arguments de un elemento <application> con el atributo scriptProcessor correspondiente en la asignación <handlers> para el proceso FastCGI. Para crear estas asignaciones, la configuración de los atributos fullPath y arguments en un elemento <application> debe agregarse al atributo scriptProcessor en la asignación <handlers> para el proceso FastCGI y separarse con el carácter "|" de barra vertical. Esta combinación sirve como clave única en cada aplicación FastCGI. Por ejemplo, el fragmento de configuración siguiente muestra dos elementos <fastCgi>/<application> de ejemplo y sus asignaciones de <controladores> correspondientes para dos controladores PHP específicos del sitio:

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

Código de ejemplo

En los ejemplos de código siguientes se agrega una aplicación FastCGI para PHP, se establece el atributo instanceMaxRequests en "10000" y se establece la variable de entorno PHP_FCGI_MAX_REQUESTS en "10000". En cada ejemplo también se agrega una asignación global de controladores FastCGI para archivos PHP a IIS y se especifica la ruta de acceso completa a un archivo ejecutable 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

Nota:

Debe asegurarse de establecer el parámetro de confirmación en apphost cuando use AppCmd.exe para configurar estas opciones. Esto confirma los valores de configuración en la sección de ubicación adecuada del archivo 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()