Compartir a través de


Aplicación FastCGI <application>

Información general

El elemento <application> de FastCGI contiene los valores de configuración de una definición específica del grupo de procesos de FastCGI. Cuando se usa FastCGI, IIS usará el valor del atributo maxInstances del elemento <application> para determinar el número de procesos de FastCGI que se pueden ejecutar en el grupo de procesos.

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 <application> no se modificó en IIS 10.0.
IIS 8.5 El elemento <application> no se modificó en IIS 8.5.
IIS 8.0 El valor predeterminado del atributo maxInstances cambió de 4 a 0 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 <application> de la colección <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 del cuadro de diálogo Roles de servidor. C G I está activado y resaltado.
  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 del cuadro de diálogo Características de Windows. C G I está seleccionado en el menú expandido.
  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 la página Servicios de rol. C G I está resaltado.
  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 del cuadro de diálogo Características de Windows. C G I está resaltado.

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 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 la página principal del sitio web predeterminado. El icono de Asignaciones de controlador está resaltado.

  4. En el panel Acciones, haga clic en Agregar asignación de módulos.
    Captura de pantalla de la ventana Administrador de I I S que muestra la página Asignaciones de controladores.

  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.

    • 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 del 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 del cuadro de diálogo Agregar información de asignación de módulos.

    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, siga los pasos descritos en la sección Creación de una asignación global de controladores de 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 la página Principal del servidor. El Configuración fast C G I está resaltado.

  4. En el panel Acciones, haga clic en Agregar aplicación.

    Captura de pantalla de la página fast C G I Configuración en I I S Manager.

  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:

      Para PHP, este número debe ser menor o igual que el número máximo de solicitudes para 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 rápida de 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.

  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 del cuadro de diálogo Editor de recopilación de variables de entorno. Las solicitudes máximas de P H P F F C G I se resaltan en el campo Miembros.

  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 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 de la página principal del servidor en I I S Manager. Se resalta el icono de THe para fast C G I Configuración.

  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 página fast C G I Configuración dentro de I I S Manager.

  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.

  6. En el cuadro de diálogo Editor de colecciones EnvironmentVariables, haga clic en Agregar.

    Captura de pantalla del panel Editor de recopilación de variables de entorno.

  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 del panel Editor de recopilación de variables de entorno. P H P F F C G I está resaltado.

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

Configuración

Puede configurar el elemento <application> 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

Atributo Descripción
activityTimeout Atributo uint opcional.

Especifica el tiempo máximo, en segundos, que un proceso de FastCGI puede tardar en procesarse. Los valores aceptables están comprendidos entre 10 y 3600.

El valor predeterminado de IIS 7.0 es 30; el valor predeterminado de IIS 7.5 es 70.
arguments Atributo de cadena opcional.

Especifica los argumentos de línea de comandos para el proceso FastCGI.
flushNamedPipe Atributo Boolean opcional.

Especifica si las canalizaciones con nombre se vacían al final de cada solicitud. Esta propiedad se aplica solo cuando se usa el protocolo de canalizaciones con nombre.

El valor predeterminado es false.
fullPath Atributo de cadena necesario.

Especifica la ruta de acceso completa del proceso FastCGI.
idleTimeout Atributo uint opcional.

Especifica la cantidad máxima de tiempo, en segundos, que un proceso de FastCGI puede estar inactivo antes de que se cierre el proceso. Los valores aceptables están comprendidos entre 10 y 604800.

El valor predeterminado es 300.
instanceMaxRequests Atributo uint opcional.

Especifica el número máximo de solicitudes que se pueden procesar con cada proceso de trabajo de FastCGI antes de reciclarse. Los valores aceptables están comprendidos entre 1 y 100000000.

El valor predeterminado es 200.
maxInstances Atributo uint opcional.

Especifica el número máximo de procesos de trabajo de FastCGI que se pueden iniciar en un grupo de aplicaciones. Los valores aceptables están comprendidos entre 0 y 10000.

El valor predeterminado es 0.
monitorChangesTo Atributo string opcional.

Especifica la ruta de acceso completa a un archivo para supervisar los cambios. Cuando se detectan cambios en el archivo, IIS finaliza y reinicia la aplicación FastCGI especificada en el atributo fullPath.

Nota: Este atributo se agregó en IIS 7.5.

No existe ningún valor predeterminado.
protocol Atributo enum opcional.

Especifica el mecanismo de transporte que se usa para comunicarse con el proceso FastCGI.

El atributo protocol puede tener uno de los siguientes valores posibles:
Valor Descripción
NamedPipe El protocolo de canalización con nombre se usará para comunicarse con el proceso de trabajo de FastCGI.
Tcp El protocolo TCP se usará para comunicarse con el proceso de trabajo de FastCGI.
El valor predeterminado es NamedPipe.
queueLength Atributo uint opcional.

Especifica el número máximo de solicitudes que se pueden poner en cola para un grupo de procesos FastCGI. Los valores aceptables están comprendidos entre 1 y 100000000.

El valor predeterminado es 1000.
requestTimeout Atributo uint opcional.

Especifica el tiempo máximo, en segundos, que puede tardar una solicitud de proceso FastCGI. Los valores aceptables están comprendidos entre 10 y 604800.

El valor predeterminado es 90.
signalBeforeTerminateSeconds Atributo uint opcional.

Especifica la cantidad de tiempo que IIS esperará después de que IIS indique una aplicación FastCGI que se debe apagar. Cuando este atributo se establece en un valor mayor que cero, IIS crea un evento heredable y pasa el valor del controlador del evento a un proceso FastCGI como valor de la variable de entorno _FCGI_SHUTDOWN_EVENT_.

Nota: Este atributo se agregó en IIS 7.5.

El valor predeterminado es 0.
stderrMode Atributo enum opcional.

Especifica el comportamiento que IIS usará con los errores que devuelven las aplicaciones FastCGI en la secuencia STDERR.

Nota: Este atributo se agregó en IIS 7.5.

El atributo stderrMode puede tener uno de los siguientes valores posibles:
Valor Descripción
ReturnStdErrIn500 Especifica que IIS devolverá un error HTTP 500 y mostrará el contenido en la secuencia STDERR al cliente. (Nota: Esto coincide con el comportamiento de IIS 7.0).

El valor numérico es 0.
ReturnGeneric500 Especifica que IIS devolverá un error HTTP 500 genérico al cliente. Esto impide que el contenido de la secuencia STDERR se devuelva al cliente.

El valor numérico es 1.
IgnoreAndReturn200 Especifica que IIS omitirá el texto de la secuencia STDERR y devolverá un error HTTP 200 y devolverá el contenido de la secuencia STDOUT al cliente.

El valor numérico es 2.
TerminateProcess Especifica que IIS finalizará el proceso FastCGI y devolverá un error HTTP 500 genérico al cliente.

El valor numérico es 3.
El valor predeterminado es ReturnStdErrIn500.

Elementos secundarios

Elemento Descripción
environmentVariables Elemento opcional.

Especifica una colección de variables de entorno que IIS pasará a la aplicación 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()