FastCGI アプリケーション: <application>

概要

FastCGI <application> 要素には、特定の FastCGI プロセス プール定義の構成設定が含まれています。 FastCGI が使われていると、IIS は <application> 要素のmaxInstances 属性の値を使って、プロセス プールで実行できる FastCGI プロセスの数を決定します。

最も簡単な FastCGI アプリケーション プールの定義では、<application> 要素の fullPath 属性を含めて、特定のアプリケーション フレームワークに使用するバイナリを定義する必要があります。 PHP フレームワークの場合は、fullPath 属性を PHP バイナリのディレクトリとファイル名に設定します。

他の属性は省略可能であり、他の多くのパラメーターを構成できます。 これには、FastCGI ワーカー プロセスがリサイクルされる前に処理できる要求の最大数、アプリケーション プールのワーカー プロセスの最大数、FastCGI 要求にかけることのできる最大時間が含まれます。

Note

FastCGI を使って要求を処理するには、まず、パスと特定のファイル名拡張子を FastCGI モジュールにマップし、ターゲットの FastCGI プロセスをスクリプト プロセッサとして指定する必要があります。

IIS 7.5 の新機能

IIS 7.5 では、<fastCgi>/<application> 要素に次の属性が追加されました。

  • monitorChangesTo 属性では、FastCGI アプリケーションの動作に影響する可能性がある変更を監視する対象のファイルを指定できます。 たとえば、PHP フレームワークを使っている場合は、monitorChangesTo 属性で PHP.INI ファイルへの完全なパスを指定して、そのファイルの変更を監視するように IIS を構成できます。
  • stderrMode 属性は、STDERR ストリームを介して FastCGI アプリケーションから返されるエラーを IIS 7 で処理する方法を指定します。
  • signalBeforeTerminateSeconds 属性を使うと、IIS が FastCGI アプリケーションにシャットダウンする必要があることを通知した後、指定した時間だけ待機するように、IIS を構成できます。 これにより、FastCGI アプリケーションは、IIS がプロセスを終了する前に設定をクリーンアップできます。

互換性

バージョン メモ
IIS 10.0 <application> 要素は、IIS 10.0 では変更されませんでした。
IIS 8.5 <application> 要素は、IIS 8.5 では変更されませんでした。
IIS 8.0 maxInstances 属性の既定値は、IIS 8.0 で 4 から 0 に変更されました。
IIS 7.5 <fastCgi> コレクションの <application> 要素は、IIS 7.5 において、monitorChangesTostderrModesignalBeforeTerminateSeconds の各属性で更新されました。
IIS 7.0 <fastCgi> コレクションの <application> 要素は IIS 7.0 で導入されました。
IIS 6.0 該当なし

段取り

FastCGI 環境を使うには、最初に CGI 役割サービスをインストールする必要があります。 インストール プロセスでは、<globalModules> 要素と <modules> 要素の両方に Common Gateway Interface (CGI) 役割サービスが登録されます。 FastCGI 環境をインストールするために他の手順を実行する必要はありません。

Windows Server 2012 または Windows Server 2012 R2

  1. タスク バーで [サーバー マネージャー]をクリックします。
  2. [サーバー マネージャー] で、[管理] メニューを選択し、[役割と機能の追加] を選択します。
  3. [役割と機能の追加] ウィザードで、[次へ] をクリックします。 インストールの種類を選択し、[次へ] をクリックします。 対象サーバーを選択し、[次へ] をクリックします。
  4. [サーバーの役割] ページで、[Web サーバー (IIS)][Web サーバー][アプリケーション開発] の順に展開して、[CGI] を選びます。 次へ をクリックします。
    [サーバーロール] ダイアログ ボックスのスクリーンショット。C G I がオンで強調表示されています。
  5. [機能の選択] ページで [次へ] をクリックします。
  6. [インストール オプションの確認] ページで、[インストール] をクリックします。
  7. [結果] ページで、 [閉じる]をクリックします。

Windows 8 または Windows 8.1

  1. [スタート] 画面で、ポインターを左下隅まで移動し、[スタート] ボタンを右クリックし、[コントロール パネル] をクリックします。
  2. [コントロール パネル][プログラムと機能] をクリックし、[Windows の機能の有効化または無効化] をクリックします。
  3. [インターネット インフォメーション サービス][World Wide Web サービス][アプリケーション開発機能] の順に展開して、[CGI] を選択します。
    Windows の [機能] ダイアログ ボックスのスクリーンショット。展開メニューで C G I が選択されています。
  4. OK をクリックします。
  5. 閉じるをクリックします。

Windows Server 2008 または Windows Server 2008 R2

  1. タスク バーで [スタート] をクリックし、[管理ツール] をポイントして、[サーバー マネージャ] をクリックします。
  2. [サーバー マネージャ] 階層ウィンドウで [役割] を展開し、[Web サーバー (IIS)] をクリックします。
  3. [Web サーバー (IIS)] ウィンドウで、[役割サービス] セクションまでスクロールし、[役割サービスの追加] をクリックします。
  4. 役割サービスの追加ウィザード[役割サービスの選択] ページで、[CGI] を選択して、[次へ] をクリックします。
    [ロール サービス] ページのスクリーンショット。C G I が強調表示されています。
  5. [インストール オプションの確認] ページで、[インストール] をクリックします。
  6. [結果] ページで、 [閉じる]をクリックします。

Windows Vista または Windows 7

  1. タスク バーで、[スタート][コントロール パネル] の順にクリックします。
  2. [コントロール パネル][プログラムと機能] をクリックし、[Windows の機能の有効化または無効化] をクリックします。
  3. [インターネット インフォメーション サービス] を展開し、[CGI] を選択して、[OK] をクリックします。
    [Windows の機能] ダイアログ ボックスのスクリーンショット。C G I が強調表示されています。

操作方法

IIS 7.0 ユーザーの場合の注意: このセクションの一部の手順では、FastCGI 設定用のユーザー インターフェイスを含む Microsoft Administration Pack for IIS 7.0 のインストールが必要な場合があります。 Microsoft Administration Pack for IIS 7.0 をインストールするには、次の URL を参照してください。

PHP 用のグローバル FastCGI ハンドラー マッピングを作成する方法

Note

次の手順を実行するには、指定するファイル パスまたはファイル名拡張子を実行するバイナリが既にインストールされている必要があります。 この例では、www.php.net から利用できる PHP の実装を使います。

  1. インターネット インフォメーション サービス (IIS) マネージャーを開きます。

    • Windows Server 2012 または Windows Server 2012 R2 を使用している場合:

      • タスク バーで、[サーバー マネージャー] をクリックし、[ツール][インターネット インフォメーション サービス (IIS) マネージャー] の順にクリックします。
    • Windows 8 または Windows 8.1 を使用している場合:

      • Windows キーを押しながら文字 X を押し、[コントロール パネル] をクリックします。
      • [管理ツール] をクリックし、[インターネット インフォメーション サービス (IIS) マネージャー] をダブルクリックします。
    • Windows Server 2008 または Windows Server 2008 R2 を使用している場合:

      • タスク バーで、[スタート] ボタンをクリックし、[管理ツール][インターネット インフォメーション サービス (IIS) マネージャー] の順にクリックします。
    • Windows Vista または Windows 7 を使用している場合:

      • タスク バーで、[スタート][コントロール パネル] の順にクリックします。
      • [管理ツール] をダブルクリックし、[インターネット インフォメーション サービス (IIS) マネージャー] をダブルクリックします。
  2. [接続] ペインで、FastCGI ハンドラー マッピングを構成するサーバー名をクリックします。

  3. [ホーム] ウィンドウで、[ハンドラー マッピング] をダブルクリックします。
    既定の Web サイトのホーム ページのスクリーンショット。ハンドラー マッピングのアイコンが強調表示されています。

  4. [操作] ペインで、[モジュール マッピングの追加] をクリックします
    [ハンドラー マッピング] ページが表示されている [I I S Manager] ウィンドウのスクリーンショット。

  5. 次の情報を入力してください。

    • [要求パス] テキスト ボックスにファイル名拡張子を入力します。 たとえば、"*.php" などです。

    • [モジュール] ドロップダウン リストで [FastCgiModule] をクリックします。

    • [実行可能ファイル] ボックスにスクリプト エンジンへのパスを入力します。 たとえば、"C:\PHP\php-cgi.exe" などです。

    • [名前] ボックスに、ハンドラー マッピングの一意の名前を入力します。 たとえば、"PHP-FastCGI" などです。

      [モジュール マッピングの追加] ダイアログ ボックスのスクリーンショット。

    • [要求の制限] をクリックします

    • [要求がマップされている場合にのみハンドラーを呼び出す] をオンにします。

    • [ファイルまたはフォルダー] オプションをクリックして選びます。

    • OK をクリックします。

      [要求の制限] ダイアログ ボックスのスクリーンショット。

  6. OK をクリックします。

  7. [モジュール マッピングの追加] ダイアログ ボックスで FastCGI アプリケーションを作成するように求められたら、[はい] をクリックします。

    [モジュール マッピング情報の追加] ダイアログ ボックスのスクリーンショット。

    Note

    これにより、先に作成したハンドラー マッピング用の FastCGI アプリケーションが自動的に作成されます。 [いいえ] を選んだ場合は、後で FastCGI アプリケーションを手動で作成できます。

PHP 用 FastCGI アプリケーションを作成する方法

Note

次の手順を実行するには、指定するファイル パスまたはファイル名拡張子を実行するバイナリが既にインストールされている必要があります。 この例では、www.php.net から利用できる PHP の実装を使います。

Note

FastCGI アプリケーションを追加しても、ハンドラー マッピングは自動的に追加されません。 そのためには、この記事の「PHP 用のグローバル FastCGI ハンドラー マッピングを作成する方法」セクションの手順のようにします。

  1. インターネット インフォメーション サービス (IIS) マネージャーを開きます。

    • Windows Server 2012 または Windows Server 2012 R2 を使用している場合:

      • タスク バーで、[サーバー マネージャー] をクリックし、[ツール][インターネット インフォメーション サービス (IIS) マネージャー] の順にクリックします。
    • Windows 8 または Windows 8.1 を使用している場合:

      • Windows キーを押しながら文字 X を押し、[コントロール パネル] をクリックします。
      • [管理ツール] をクリックし、[インターネット インフォメーション サービス (IIS) マネージャー] をダブルクリックします。
    • Windows Server 2008 または Windows Server 2008 R2 を使用している場合:

      • タスク バーで、[スタート] ボタンをクリックし、[管理ツール][インターネット インフォメーション サービス (IIS) マネージャー] の順にクリックします。
    • Windows Vista または Windows 7 を使用している場合:

      • タスク バーで、[スタート][コントロール パネル] の順にクリックします。
      • [管理ツール] をダブルクリックし、[インターネット インフォメーション サービス (IIS) マネージャー] をダブルクリックします。
  2. [接続] ウィンドウで、FastCGI の設定を構成するサーバー名をクリックします。

  3. [ホーム] ウィンドウで、[FastCGI の設定] をダブルクリックします。

    [サーバー ホーム] ページのスクリーンショット。[Fast C G I Settings]\(高速の C G I 設定\) が強調表示されています。

  4. [操作] ウィンドウで [アプリケーションの追加] をクリックします。

    I I S マネージャーの [Fast C G I Settings] ページのスクリーンショット。

  5. [FastCGI アプリケーションの追加] ダイアログ ボックスで、次の情報を入力します。

    • [完全なパス] ボックスにスクリプト エンジンへのパスを入力します。 たとえば、"C:\PHP\php-cgi.exe" などです。

    • FastCGI アプリケーションに対する要求の最大数を入力します。

      Note

      PHP の場合、この数は、PHP_FCGI_MAX_REQUESTS 環境変数を使って構成される PHP 環境に対する要求の最大数以下である必要があります。

      [高速 C G I アプリケーションの追加] ダイアログ ボックスのスクリーンショット。

  6. EnvironmentVariables の横にある省略記号 ([...]) をクリックして、環境変数コレクション エディターを開きます。

  7. [EnvironmentVariables コレクション エディター] ダイアログ ボックスで、[追加] をクリックします。

    [環境変数コレクション エディター] ダイアログ ボックスのスクリーンショット。

  8. 次の情報を入力して、[OK] をクリックします。

    • [名前] に「PHP_FCGI_MAX_REQUESTS」と入力します。

    • [値] に「10000」と入力します。

      [環境変数コレクション エディター] ダイアログ ボックスのスクリーンショット。[メンバー] フィールドで[P H P F C G I 最大要求数]が強調表示されています。

  9. [OK] をクリックして、[FastCGI アプリケーションの追加] ダイアログ ボックスを閉じます。

PHP 用の FastCGI 環境変数を追加する方法

Note

次の手順を実行するには、指定するファイル パスまたはファイル名拡張子を実行するバイナリが既にインストールされている必要があります。 この例では、www.php.net から利用できる PHP の実装を使います。

  1. インターネット インフォメーション サービス (IIS) マネージャーを開きます。

    • Windows Server 2012 または Windows Server 2012 R2 を使用している場合:

      • タスク バーで、[サーバー マネージャー] をクリックし、[ツール][インターネット インフォメーション サービス (IIS) マネージャー] の順にクリックします。
    • Windows 8 または Windows 8.1 を使用している場合:

      • Windows キーを押しながら文字 X を押し、[コントロール パネル] をクリックします。
      • [管理ツール] をクリックし、[インターネット インフォメーション サービス (IIS) マネージャー] をダブルクリックします。
    • Windows Server 2008 または Windows Server 2008 R2 を使用している場合:

      • タスク バーで、[スタート] ボタンをクリックし、[管理ツール][インターネット インフォメーション サービス (IIS) マネージャー] の順にクリックします。
    • Windows Vista または Windows 7 を使用している場合:

      • タスク バーで、[スタート][コントロール パネル] の順にクリックします。
      • [管理ツール] をダブルクリックし、[インターネット インフォメーション サービス (IIS) マネージャー] をダブルクリックします。
  2. [接続] ウィンドウで、FastCGI の設定を構成するサーバー名をクリックします。

  3. [ホーム] ウィンドウで、[FastCGI の設定] をダブルクリックします。

    I I S Manager の [サーバー ホーム] ページのスクリーンショット。[Fast C G I Settings] の [THe] アイコンが強調表示されています。

  4. [FastCGI の設定] ウィンドウで PHP アプリケーションを強調表示にした後、[操作] ウィンドウで [編集] をクリックします。

    I I S マネージャー内の [Fast C G I Settings] ページのスクリーンショット。

  5. [FastCGI アプリケーションの編集] ダイアログ ボックスで、EnvironmentVariables の横にある省略記号 ([...]) をクリックして、環境変数コレクション エディターを開きます。

    [高速 C G I アプリケーションの編集] ダイアログ ボックスのスクリーンショット。

  6. [EnvironmentVariables コレクション エディター] ダイアログ ボックスで、[追加] をクリックします。

    [環境変数コレクション エディター] ウィンドウのスクリーンショット。

  7. 次の情報を入力して、[OK] をクリックします。

    • [名前] に「PHP_FCGI_MAX_REQUESTS」と入力します。

    • [値] に「10000」と入力します。

      [環境変数コレクション エディター] ウィンドウのスクリーンショット。P H P F C G I が強調表示されている。

  8. [OK] をクリックして、[FastCGI アプリケーションの追加] ダイアログ ボックスを閉じます。

構成

<application> 要素は、ApplicationHost.config ファイルを使ってサーバー レベルで、または Web.config ファイルを使ってサイト レベル、アプリケーション レベル、ディレクトリ レベルで構成できます。

属性

属性 説明
activityTimeout 省略可能な uint 属性。

FastCGI プロセスが処理にかけることのできる最大時間 (秒単位) を指定します。 使用できる値は、10 から 3600 の範囲です。

IIS 7.0 での既定値は 30 です。IIS 7.5 での既定値は 70 です。
arguments 省略可能な文字列属性。

FastCGI プロセスのコマンド ライン引数を指定します。
flushNamedPipe 省略可能で、 Boolean 型の属性。

各要求の最後で名前付きパイプをフラッシュするかどうかを指定します。 このプロパティは、名前付きパイプ プロトコルの使用時にのみ適用されます。

既定値は false です。
fullPath 必須の文字列属性です。

FastCGI プロセスの完全なパスを指定します。
idleTimeout 省略可能な uint 属性。

FastCGI プロセスがシャットダウンされずにアイドル状態のままでいられる最大時間 (秒単位) を指定します。 使用できる値は、10 から 604,800 の範囲です。

既定値は 300 です。
instanceMaxRequests 省略可能な uint 属性。

各 FastCGI ワーカー プロセスがリサイクルされる前に処理できる要求の最大数を指定します。 使用できる値は、1 から 10,000,000 の範囲です。

既定値は 200 です。
maxInstances 省略可能な uint 属性。

アプリケーション プールで開始できる FastCGI ワーカー プロセスの最大数を指定します。 使用できる値は、0 から 10,000 の範囲です。

既定値は 0 です。
monitorChangesTo 省略可能な文字列属性。

変更を監視するファイルへの完全なパスを指定します。 ファイルへの変更が検出されると、IIS は、fullPath 属性で指定されている FastCGI アプリケーションを終了して再起動します。

注意: この属性は IIS 7.5 で追加されました。

既定値はありません。
protocol 省略可能な列挙型属性。

FastCGI プロセスとの通信に使われるトランスポート メカニズムを指定します。

protocol 属性には、次のいずれかの値を指定できます。
Value 説明
NamedPipe 名前付きパイプ プロトコルが、FastCGI ワーカー プロセスとの通信に使用されます。
Tcp TCP プロトコルが、FastCGI ワーカー プロセスとの通信に使用されます。
既定値は NamedPipe です。
queueLength 省略可能な uint 属性。

FastCGI プロセス プールのキューに登録できる要求の最大数を指定します。 使用できる値は、1 から 10,000,000 の範囲です。

既定値は 1000 です。
requestTimeout 省略可能な uint 属性。

FastCGI プロセス要求が実行できる最大時間 (秒単位) を指定します。 使用できる値は、10 から 604,800 の範囲です。

既定値は 90 です。
signalBeforeTerminateSeconds 省略可能な uint 属性。

シャットダウンする必要があることを IIS が FastCGI アプリケーションに通知した後で IIS が待機する時間を指定します。 この属性に 0 より大きい値を設定すると、IIS は継承可能なイベントを作成し、そのイベントのハンドル値を _FCGI_SHUTDOWN_EVENT_ 環境変数の値として FastCGI プロセスに渡します。

注意: この属性は IIS 7.5 で追加されました。

既定値は 0 です。
stderrMode 省略可能な列挙型属性。

FASTCGI アプリケーションが STDERR ストリームで返すエラーに対して IIS が使う動作を指定します。

注意: この属性は IIS 7.5 で追加されました。

stderrMode 属性には、次のいずれかの値を指定できます。
Value 説明
ReturnStdErrIn500 IIS がクライアントに HTTP 500 エラーを返して STDERR ストリームの内容を表示することを指定します。 (: これは IIS 7.0 の動作と一致します。)

この数値は 0 です。
ReturnGeneric500 IIS が一般的な HTTP 500 エラーをクライアントに返すことを指定します。 これにより、STDERR ストリームの内容がクライアントに返されなくなります。

この数値は 1 です。
IgnoreAndReturn200 IIS が、STDERR ストリーム内のテキストを無視して HTTP 200 エラーを返し、STDOUT ストリームの内容をクライアントに返すことを指定します。

この数値は 2 です。
TerminateProcess IIS が FastCGI プロセスを終了し、一般的な HTTP 500 エラーをクライアントに返すことを指定します。

この数値は 3 です。
既定値は ReturnStdErrIn500 です。

子要素

要素 説明
environmentVariables 省略可能な要素です。

IIS が FastCGI アプリケーションに渡す環境変数のコレクションを指定します。

構成サンプル

次の構成サンプルでは、PHP 用の FastCGI アプリケーションを追加し、instanceMaxRequests 属性を "10000" に設定して、PHP_FCGI_MAX_REQUESTS 環境変数を "10000" に設定します。

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

Note

PHP の場合、PHP_FCGI_MAX_REQUESTS 環境変数の値は、FastCGI の <application> 要素の instanceMaxRequests 属性で指定されている値以下の値である必要があります。

次の構成サンプルでは、PHP ファイルのグローバル FastCGI ハンドラー マッピングを IIS に追加し、FastCGI の実行可能ファイルへの完全なパスを指定しています。

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

Note

FastCGI の設定は、特別な形式に設定された FastCGI アプリケーションとハンドラー マッピングを使って、サイトごとに構成できます。これは、<application> 要素の fullPatharguments 属性を、FastCGI プロセスの <handlers> マッピングでの対応する scriptProcessor 属性と照合して区別されます。 これらのマッピングを作成するには、<application> 要素の fullPatharguments 属性の設定を、FastCGI プロセスの <handlers> マッピングの scriptProcessor 属性に、パイプ "|" 文字で区切って追加する必要があります。 この組み合わせは、各 FastCGI アプリケーションの一意キーとして機能します。 たとえば、次に示す構成抜粋は、<fastCgi>/<application> 要素の 2 つの例と、それに対応する 2 つのサイト固有 PHP ハンドラーの <handlers> マッピングです。

<fastCgi>
   <application fullPath="C:\PHP\php-cgi.exe"
      arguments="-d open_basedir=C:\Websites\Website1" />
   <application fullPath="C:\PHP\php-cgi.exe"
      arguments="-d open_basedir=C:\Websites\Website2" />
</fastCgi>

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

サンプル コード

次のコード サンプルでは、PHP 用の FastCGI アプリケーションを追加し、instanceMaxRequests 属性を "10000" に設定して、PHP_FCGI_MAX_REQUESTS 環境変数を "10000" に設定します。また、各サンプルでは、PHP ファイルのグローバル FastCGI ハンドラー マッピングを IIS に追加し、FastCGI の実行可能ファイルへの完全なパスを指定しています。

AppCmd.exe

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

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

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

Note

AppCmd.exe を使用してこれらの設定を構成するときは、commit パラメーターを必ず apphost に設定する必要があります。 これで、ApplicationHost.config ファイルの適切な場所セクションに構成設定がコミットされます。

C#

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

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

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

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

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

         serverManager.CommitChanges();
      }
   }
}

VB.NET

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

Module Sample

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

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

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

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

      serverManager.CommitChanges()
   End Sub

End Module

JavaScript

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

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

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

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

adminManager.CommitChanges();

VBScript

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

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

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

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

adminManager.CommitChanges()