Compartilhar via


FastCGI <fastCgi>

Visão geral

O elemento <fastCgi> contém uma coleção de elementos <application>, cada um deles cria uma definição de pool de aplicativos FastCGI. O IIS (Serviços de Informações da Internet) 7 inclui o componente FastCGI. Esse componente oferece maior confiabilidade e melhor desempenho e permite executar a estrutura de aplicativos PHP e outras estruturas de aplicativos Web no IIS 7.

A definição mais simples do pool de aplicativos FastCGI requer que você inclua o atributo fullPath em um elemento <application> para definir os binários a serem usados para a estrutura de aplicativo específica. Para a estrutura php, defina o atributo fullPath para o diretório e o nome do arquivo dos binários PHP.

Outros atributos são opcionais e permitem que você configure vários outros parâmetros. Isso inclui o número máximo de solicitações que um processo de trabalho FastCGI pode processar antes de ser reciclado, o número máximo de processos de trabalho para um pool de aplicativos e o tempo máximo que uma solicitação FastCGI pode levar.

Observação

Para processar solicitações usando FastCGI, primeiro você deve mapear o caminho e as extensões de nome de arquivo específicas para o módulo FastCGI e especificar o processo FastCGI de destino como o processador de script.

Novidades no IIS 7.5

O IIS 7.5 adicionou os seguintes atributos ao elemento <fastCgi>/<application> :

  • O atributo monitorChangesTo permite que você especifique um arquivo para monitorar alterações que possam afetar o comportamento de um aplicativo FastCGI. Por exemplo, se você usar a estrutura php, poderá configurar o IIS para monitorar o PHP. Arquivo INI para alterações especificando o caminho completo para o arquivo no atributo monitorChangesTo.
  • O atributo stderrMode especifica como o IIS 7 lidará com erros retornados de um aplicativo FastCGI por meio do fluxo STDERR.
  • O atributo signalBeforeTerminateSeconds permite que você configure o IIS para aguardar um período especificado depois que o IIS sinalizar um aplicativo FastCGI que ele precisa desligar. Isso permite que um aplicativo FastCGI limpe todas as configurações antes que o IIS encerre o processo.

Compatibilidade

Versão Observações
IIS 10.0 O elemento <fastCgi> não foi modificado no IIS 10.0.
IIS 8.5 O elemento <fastCgi> não foi modificado no IIS 8.5.
IIS 8.0 O elemento <fastCgi> não foi modificado no IIS 8.0.
IIS 7.5 O elemento <application> da coleção <fastCgi> foi atualizado no IIS 7.5 com os atributos monitorChangesTo, stderrModee signalBeforeTerminateSeconds.
IIS 7.0 O elemento <fastCgi> foi introduzido no IIS 7.0.
IIS 6,0 N/D

Instalação

Para usar o ambiente FastCGI, primeiro você deve instalar o serviço de função CGI. O processo de instalação registra o serviço de função CGI (Common Gateway Interface) nos elementos <globalModules> e <modules>. Você não precisa executar outra etapa para instalar o ambiente FastCGI.

Windows Server 2012 R2 ou Windows Server 2012

  1. Na barra de tarefas, clique em Gerenciador do Servidor.
  2. No Gerenciador do Servidor, clique no menu Gerenciar e clique em Adicionar Funções e Recursos.
  3. No assistente Adicionar Funções e Recursos, clique em Avançar. Selecione o tipo de instalação e clique em Avançar. Selecione o servidor de destino e clique em Avançar.
  4. Na página Funções de Servidor, expanda Servidor Web (IIS), Servidor Web, Desenvolvimento do Aplicativo e selecionar CGI. Clique em Avançar.
    Captura de tela de C G I selecionada em uma interface do Windows Server 2012.
  5. Na página Selecionar Recursos, clique em Avançar.
  6. Na página Confirmar seleções de instalação, clique em Instalar.
  7. Na página Resultados , clique em Fechar.

Windows 8 ou Windows 8.1

  1. Na tela Iniciar, mova o ponteiro até o canto inferior esquerdo, clique com o botão direito do mouse no botão Iniciar e clique em Painel de Controle.
  2. Em Painel de Controle, clique em Programas e Recursos e clique em Ativar ou desativar recursos do Windows.
  3. Expanda Serviços de Informações da Internet, Serviços da World Wide Web, Recursos de Desenvolvimento de Aplicativos e selecione CGI.
    Captura de tela de C G I selecionada em uma interface do Windows 8.
  4. Clique em OK.
  5. Clique em Fechar.

Windows Server 2008 R2 ou Windows Server 2008

  1. Na barra de tarefas, clique em Iniciar, vá para Ferramentas Administrativas e clique em Gerenciador do Servidor.
  2. No painel de hierarquia do Gerenciador do Servidor, expanda Funções e clique em Servidor Web (IIS).
  3. No painel Servidor Web (IIS), role até a seção Serviços de Função e clique em Adicionar Serviços de Função.
  4. Na página Selecionar Serviços de Função do Assistente para Adicionar Serviços de Função, selecione CGI e clique em Avançar.
    Captura de tela de C G I selecionada em uma interface do Windows Server 2008.
  5. Na página Confirmar Seleções de Instalação, clique em Instalar.
  6. Na página Resultados , clique em Fechar.

Windows Vista ou Windows 7

  1. Na barra de tarefas, clique em Iniciar e, depois, em Painel de Controle.
  2. Em Painel de Controle, clique em Programas e Recursos e clique em Ativar ou desativar Recursos do Windows.
  3. Expanda Serviços de Informações da Internet, selecione CGI e, em seguida, clique em OK.
    Captura de tela de C G I selecionada em uma interface do Windows Vista ou Windows 7.

Instruções

Observação para usuários do IIS 7.0: algumas etapas nesta seção podem exigir que você instale o Microsoft Administration Pack para IIS 7.0, que inclui uma interface do usuário para configurações de FastCGI. Para instalar o Microsoft Administration Pack para IIS 7.0, consulte a seguinte URL:

Como criar um mapeamento global do manipulador FastCGI para PHP

Observação

Antes que o procedimento a seguir funcione, você já deve ter instalado binários que executarão o caminho do arquivo ou a extensão de nome de arquivo que você especificar. Este exemplo usa uma implementação PHP disponível de https://www.php.net/.

  1. Abra o Gerenciador dos Serviços de Informações da Internet (IIS):

    • Caso você esteja usando o Windows Server 2012 ou o Windows Server 2012 R2:

      • Na barra de tarefas, clique em Gerenciador do Servidor, em Ferramentas e em Gerenciador do IIS (Serviços de Informações da Internet).
    • Se você estiver usando o Windows 8 ou Windows 8.1:

      • Mantenha pressionada a tecla Windows, pressione a letra X e clique em Painel de Controle.
      • Clique em Ferramentas Administrativas e clique duas vezes em Gerenciador do IIS (Serviços de Informações da Internet).
    • Caso você esteja usando o Windows Server 2008 ou o Windows Server 2008 R2:

      • Na barra de tarefas, clique em Iniciar, vá para Ferramentas Administrativas e clique em Gerenciador do IIS (Serviços de Informações da Internet).
    • Se você estiver usando o Windows Vista ou Windows 7:

      • Na barra de tarefas, selecione Iniciar e selecione Painel de Controle.
      • Clique duas vezes em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
  2. No painel Conexões, clique no nome do servidor no qual deseja definir os mapeamentos do manipulador do FastCGI.

  3. No painel Página Inicial, clique duas vezes em Mapeamentos de Manipulador.
    Captura de tela dos Mapeamentos do Manipulador selecionados no painel Página Inicial do Site Padrão.

  4. No painel Ações , clique em Adicionar Mapeamento de Módulo. Captura de tela dos mapeamentos de manipulador desabilitados e habilitados no Gerenciador I S.

  5. Insira as seguintes informações:

    • Insira a extensão de nome de arquivo na caixa de texto Caminho da solicitação. Por exemplo, "*.php".

    • Clique em FastCgiModule na lista suspensa Módulo.

    • Insira o caminho para o mecanismo de script na caixa Executável. Por exemplo, "C:\PHP\php-cgi.exe".

    • Insira um nome exclusivo para o mapeamento do manipulador na caixa Nome. Por exemplo, "PHP-FastCGI".

      Captura de tela da caixa de diálogo Adicionar mapeamento de módulo com as opções especificadas.

    • Clique em Restrições de Solicitação.

    • Selecione Invocar identificador somente se a solicitação for mapeada para.

    • Clique para selecionar a opção Arquivo ou Pasta.

    • Clique em OK.

      Captura de tela da configuração das opções de mapeamento na caixa de diálogo Restrições de solicitação.

  6. Clique em OK.

  7. Se for solicitado que você crie um aplicativo FastCGI na caixa de diálogo Adicionar Mapeamento de Módulo, clique em Sim.

    Captura de tela antes de confirmar a criação de um novo aplicativo para o executável especificado.

    Observação

    Isso criará automaticamente um aplicativo FastCGI para o mapeamento de manipulador que você acabou de criar. Se você escolher Não, poderá criar manualmente um aplicativo FastCGI posteriormente.

Como criar um aplicativo FastCGI para PHP

Observação

Antes que o procedimento a seguir funcione, você já deve ter instalado binários que executarão o caminho do arquivo ou a extensão de nome de arquivo que você especificar. Este exemplo usa uma implementação PHP disponível de www.php.net.

Observação

A adição de um aplicativo FastCGI não adiciona automaticamente um mapeamento de manipulador. Para fazer isso, você precisa seguir as etapas na seção Como criar um mapeamento do manipulador FastCGI para o PHP deste artigo.

  1. Abra o Gerenciador dos Serviços de Informações da Internet (IIS):

    • Caso você esteja usando o Windows Server 2012 ou o Windows Server 2012 R2:

      • Na barra de tarefas, clique em Gerenciador do Servidor, em Ferramentas e em Gerenciador do IIS (Serviços de Informações da Internet).
    • Se você estiver usando o Windows 8 ou Windows 8.1:

      • Mantenha pressionada a tecla Windows, pressione a letra X e clique em Painel de Controle.
      • Clique em Ferramentas Administrativas e clique duas vezes em Gerenciador do IIS (Serviços de Informações da Internet).
    • Caso você esteja usando o Windows Server 2008 ou o Windows Server 2008 R2:

      • Na barra de tarefas, clique em Iniciar, vá para Ferramentas Administrativas e clique em Gerenciador do IIS (Serviços de Informações da Internet).
    • Se você estiver usando o Windows Vista ou Windows 7:

      • Na barra de tarefas, selecione Iniciar e selecione Painel de Controle.
      • Clique duas vezes em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
  2. No painel Conexões, clique no nome do servidor no qual deseja definir as configurações do FastCGI.

  3. No painel Página Inicial, clique duas vezes em Configurações do FastCGI.
    Captura de tela das Configurações rápidas de C G I selecionadas no painel Início do SERVIDOR.

  4. No painel Ações, selecione Adicionar Aplicativo
    Captura de tela de um painel de configurações Fast C G I vazio.

  5. Na caixa de diálogo Adicionar Aplicativo FastCGI, insira as seguintes informações:

    • Insira o caminho para o mecanismo de script na caixa Caminho Completo. Por exemplo, "C:\PHP\php-cgi.exe".

    • Insira o número máximo de solicitações para o aplicativo FastCGI.

      Observação

      Para PHP, esse número deve ser menor ou igual ao número máximo de solicitações para o ambiente PHP, que é configurado usando a variável de ambiente PHP_FCGI_MAX_REQUESTS.
      Captura de tela da caixa de diálogo Adicionar aplicativo Fast C G I com as propriedades padrão Fast C G I.

  6. Clique nas reticências (...) ao lado de EnvironmentVariables para abrir o editor de coleção de variáveis de ambiente.

  7. Na caixa de diálogo Editor da Coleção EnvironmentVariables, clique em Adicionar.
    Captura de tela de uma caixa de diálogo vazia do Editor de Coleção de Variáveis de Ambiente.

  8. Insira as seguintes informações e clique em OK.

    • Insira "PHP_FCGI_MAX_REQUESTS" em Nome.

    • Insira "10000" como o Valor.

      Captura de tela da nova variável na lista Membros com as propriedades especificadas.

  9. Clique em OK para fechar a caixa de diálogo Adicionar Aplicativo FastCGI.

Como adicionar uma variável de ambiente FastCGI para PHP

Observação

Antes que o procedimento a seguir funcione, você já deve ter instalado binários que executarão o caminho do arquivo ou a extensão de nome de arquivo que você especificar. Este exemplo usa uma implementação PHP disponível de https://www.php.net/.

  1. Abra o Gerenciador dos Serviços de Informações da Internet (IIS):

    • Caso você esteja usando o Windows Server 2012 ou o Windows Server 2012 R2:

      • Na barra de tarefas, clique em Gerenciador do Servidor, em Ferramentas e em Gerenciador do IIS (Serviços de Informações da Internet).
    • Se você estiver usando o Windows 8 ou Windows 8.1:

      • Mantenha pressionada a tecla Windows, pressione a letra X e clique em Painel de Controle.
      • Clique em Ferramentas Administrativas e clique duas vezes em Gerenciador do IIS (Serviços de Informações da Internet).
    • Caso você esteja usando o Windows Server 2008 ou o Windows Server 2008 R2:

      • Na barra de tarefas, clique em Iniciar, vá para Ferramentas Administrativas e clique em Gerenciador do IIS (Serviços de Informações da Internet).
    • Se você estiver usando o Windows Vista ou Windows 7:

      • Na barra de tarefas, selecione Iniciar e selecione Painel de Controle.
      • Clique duas vezes em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
  2. No painel Conexões, clique no nome do servidor no qual deseja definir as configurações do FastCGI.

  3. No painel Página Inicial, clique duas vezes em Configurações do FastCGI.
    Captura de tela do ícone Configurações rápidas de C G I selecionado no painel Página inicial do SERVIDOR.

  4. Realce o aplicativo PHP no painel Configurações FastCGI e clique em Editar no painel Ações.
    Captura de tela do aplicativo P H P selecionado no painel Configurações rápidas de C G I.

  5. Na caixa de diálogo Editar Aplicativo FastCGI, clique nas reticências (...) ao lado de EnvironmentVariables para abrir o editor de coleção de variáveis de ambiente.
    Captura de tela da caixa de diálogo Editar aplicativo rápido C G I com as opções especificadas.

  6. Na caixa de diálogo Editor da Coleção EnvironmentVariables, clique em Adicionar.
    Captura de tela de uma caixa de diálogo vazia do Editor de Coleção de Variáveis de Ambiente antes de adicionar uma nova variável.

  7. Insira as seguintes informações e clique em OK.

    • Insira "PHP_FCGI_MAX_REQUESTS" em Nome.

    • Insira "10000" como o Valor.

      Captura de tela após adicionar a nova variável de ambiente com as propriedades especificadas.

  8. Clique em OK para fechar a caixa de diálogo Adicionar Aplicativo FastCGI.

Configuração

Você pode configurar o elemento <fastCgi> no nível do servidor no arquivo ApplicationHost.config ou no nível do site, do aplicativo ou do diretório em um arquivo Web.config.

Atributos

Nenhum.

Elementos filho

Elemento Descrição
application Elemento opcional.

Adiciona uma definição de pool de processos FastCGI à coleção de definições do pool de processos FastCGI.

Exemplo de configuração

O exemplo de configuração a seguir adiciona um aplicativo FastCGI para PHP, define o atributo instanceMaxRequests como “10000” e define a variável de ambiente PHP_FCGI_MAX_REQUESTS como “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>

Observação

Para PHP, o valor da variável de ambiente PHP_FCGI_MAX_REQUESTS deve ser um número menor ou igual ao valor especificado pelo atributo instanceMaxRequests do elemento <application> do FastCGI.

O exemplo de configuração a seguir adiciona um mapeamento global do manipulador FastCGI para arquivos PHP ao IIS e especifica o caminho completo para um arquivo executável 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>

Observação

As configurações de FastCGI podem ser configuradas por site por meio do uso de aplicativos FastCGI especialmente formatados e por mapeamentos de manipulador, que são diferenciados pela correspondência dos atributos fullPath e arguments para um elemento <application> com o atributo scriptProcessor correspondente no mapeamento <handlers> para o processo FastCGI. Para criar esses mapeamentos, as configurações nos atributos fullPath e arguments para um elemento <application> devem ser adicionadas ao atributo scriptProcessor no mapeamento <handlers> para o processo FastCGI e separados pelo caractere "|" do pipe. Essa combinação serve como uma chave exclusiva para cada aplicativo FastCGI. Por exemplo, o trecho de configuração a seguir mostra dois elementos de exemplo <fastCgi>/<application> e seus mapeamentos de <manipuladores> correspondentes para dois manipuladores PHP específicos do site:

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

Exemplo de código

Os códigos de exemplo a seguir adicionam um aplicativo FastCGI para PHP, definem o atributo instanceMaxRequests como “10000” e definem a variável de ambiente PHP_FCGI_MAX_REQUESTS como “10000”. Cada amostra também adiciona um mapeamento global do manipulador FastCGI para arquivos PHP ao IIS e especifica o caminho completo para um arquivo executável 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

Observação

Defina o parâmetro commit para apphost quando usar AppCmd.exe para definir essas configurações. Isso confirma os conjuntos de configurações para a seção de local apropriado no arquivo 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()