FastCGI を使用した IIS 6 での PHP アプリケーションのホスト

公開日: 2007 年 12 月 5 日 (作業者: IIS チーム (英語))

更新日: 2009 年 9 月 22 日 (作業者: IIS チーム (英語))

はじめに

この記事では、Microsoft IIS FastCGI 拡張機能を使用して、Windows XP および Windows Server® 2003 オペレーティング システム上で PHP アプリケーションをセットアップして実行する方法について説明します。

FastCGI とは

FastCGI は、アプリケーション フレームワークの CGI 実行可能ファイルを Web サーバーと連携できるようにするための標準のプロトコルです。標準の CGI プロトコルとは異なり、FastCGI では複数の要求に対して CGI プロセスが再利用されます。これにより、CGI に比べパフォーマンスが大幅に向上します。IIS FastCGI サポートにより、IIS では FastCGI プロトコルを使用して PHP や Ruby On Rails などの通常の CGI プログラムをホストすることができ、こうしたアプリケーション フレームワークの運用展開において高いパフォーマンスと安定性を実現します。

IIS FastCGI サポートを使用するには以下のものが必要です。

  • IIS Web サーバー
  • IIS FastCGI 拡張機能
  • CGI プログラム (php-cgi.exe など)

Web サーバーでは、アプリケーションへの HTTP 要求を FastCGI コンポーネントにディスパッチし (これにより CGI プログラム実行可能ファイルが起動されます)、要求を転送して処理を行います。要求の処理が完了し、応答がサーバーに返され、クライアントに送信されると、CGI プロセスはそれ以降の要求についても再利用されます。これにより、要求ごとに新しいプロセスを開始する場合の高パフォーマンスに対するペナルティを回避することができ、運用環境で優れたパフォーマンスとスケーラビリティを実現します。

FastCGI プロトコルの詳細については、http://www.fastcgi.com/devkit/doc/fcgi-spec.html(英語) を参照してください。

IIS 6.0 および IIS 5.1 用 FastCGI 拡張機能のインストール

32 ビット版と 64 ビット版の Windows XP および Windows Server 2003 用 FastCGI 拡張機能は、次の場所からダウンロードできます。

FastCGI for IIS 6

FastCGI インストーラーを実行すると、インストーラーによって FastCGI 特有のファイルが %WINDIR%\system32\inetsrv フォルダーにコピーされ、FastCGI Web サーバー拡張機能が登録されて有効になります。インストーラーによってコピーされるファイルのうち、次のファイルに留意してください。

  • fcgiext.dll – 要求を処理するために FastCGI 対応のプロセスと通信する FastCGI ハンドラー本体です。
  • fcgiext.ini – ファイル拡張子と FastCGI プロセスのマッピングが含まれている構成ファイルです。また、FastCGI プロセス プールの構成も含まれています。
  • fcgiconfig.js – FastCGI 拡張機能を構成します。このスクリプトにより、fcgiext.ini ファイルの更新、IIS メタベースの変更、および Web サービス アプリケーション プールのリサイクルが必要に応じて行われます。

PHP のダウンロードおよびインストール

FastCGI 拡張機能は、Windows 用に配布されている現在の公式版である PHP 4.4.x および PHP 5.x と完全な互換性があり、http://windows.php.net/download (英語) から入手できます。FastCGI 拡張機能では、シングル スレッド方式で PHP プロセスをホストして実行するので、Windows 用に提供されている非スレッド セーフ PHP ビルド版をダウンロードしてインストールすることをお勧めします。スレッド セーフではないことは、FastCGI のような単一の同時実行環境に適しているので、非スレッド セーフ PHP ビルド版ではパフォーマンスが向上します。

PHP と連携するように FastCGI 拡張機能を構成する

PHP を Windows 上にインストールしたら、2 つの方法で FastCGI を構成できます。1 つは FastCGI 拡張機能のインストールに付属する構成スクリプトを使用する方法で、もう 1 つは IIS 構成設定および fcgiext.ini ファイルを変更して手動ですべての構成タスクを実行する方法です。選択するオプションに応じて、対応する以下のセクションを参照してください。

PHP と連携させるためにスクリプトを使用して FastCGI 拡張機能を構成する

fcgconfig.js という名前の構成スクリプトが FastCGI 拡張機能のインストールに付属しています。このスクリプトは、%WINDIR%\system32\inetsrv にあります。PHP と連携するように FastCGI 拡張機能を構成するには、次の手順に従います。

コマンド ライン ウィンドウを開き、現在のディレクトリを %WINDIR%\system32\inetsrv に変更し、.php 拡張子を処理するプログラムとして、PHP CGI プログラムを登録するように次の構成スクリプトを実行します。

cscript fcgiconfig.js -add -section:"PHP" -extension:php -path:"C:\PHP\php-cgi.exe"

C:\PHP 以外のディレクトリにインストールした場合は、C:\PHP\php-cgi.exe を php-cgi.exe へのパスに置き換えます。

メモ: FastCGI コンポーネントによって処理される PHP 拡張子をサーバー全体に登録せず、特定の Web サイトに対してのみ登録する場合は、" –site:[siteId]" 引数を追加します。例を次に示します。

cscript fcgiconfig.js -add -section:"PHP" -extension:php -path:"C:\PHP\php-cgi.exe"  –site:1

メモ: FastCGI 拡張機能でサポートされる構成パラメーターの全一覧については、FastCGI 拡張機能のドキュメントを参照してください。

PHP と連携させるために FastCGI 拡張機能を手動で構成する

IIS と FastCGI 拡張機能を手動で構成するには、PHP 拡張機能のスクリプト マッピングを IIS メタベースに作成して、%WINDIR%\system32\inetsrv にある fcgiext.ini ファイルを変更する必要があります。

スクリプト マッピングを作成する

  1. inetmgr.exe を起動します。
  2. ローカル コンピューターのコンピューター アイコンをダブルクリックします。
  3. [Web サイト] を右クリックし、[プロパティ] を選択します。
  4. [ホーム ディレクトリ] タブをクリックします。
  5. [構成] ボタンをクリックします。
  6. [追加] ボタンをクリックします。
  7. %WINDIR%\system32\inetsrv にある fcgiext.dll に移動します。

メモ: 64 ビット版のコンピューター上で、32 ビット モードの FastCGI を使用する必要がある場合は、%WINDIR%\SysWOW64\inetsrv に移動します。

    8.  [拡張子] に「.php」と入力します。

    9.  [動詞] に「GET,HEAD,POST」と入力します。

  10.  [スクリプト エンジン] と [ファイルの存在を確認する] のチェック ボックスがオンになっていることを確認します。

Ff454028.file1_247(ja-jp,TechNet.10).png

    11.  [OK] をクリックします。

fcigext.ini ファイルを変更する

スクリプト マッピングを追加したら、次の手順で、fcgiext.ini ファイルを変更します。

  1. 拡張子とアプリケーションのマッピング (php=PHP) を [Types] セクションに追加します。
  2. [PHP] セクションに ExePath=c:\php\php-cgi.exe を追加します (PHP ファイルを C:\PHP フォルダーにインストールした場合)。
[Types]
'
php=PHP
'
 
[PHP]
ExePath=c:\php\php-cgi.exe

fcgiext.ini ファイルへのすべての変更を保存したら、PHP アプリケーションをホストする Web サイトに関連付けられているアプリケーション プールを再起動します。

IIS で既定のドキュメントを構成する

ほとんどの PHP アプリケーションでは、既定のアプリケーション ドキュメントとして、index.php という名前のファイルが使用されます。このファイルを既定のコンテンツ ページとして扱うように IIS を構成します。

  1. inetmgr.exe を起動します。
  2. ローカル コンピューターのコンピューター アイコンをダブルクリックします。
  3. [Web サイト] を右クリックし、[プロパティ] を選択します。
  4. [ドキュメント] タブをクリックします。
  5. [追加] ボタンをクリックし、[既定のドキュメント名:] に「index.php」と入力します。
  6. [OK] をクリックします。

Ff454028.file2_247(ja-jp,TechNet.10).png 

PHP の機能、セキュリティ、パフォーマンスを最適化する FastCGI 構成の設定

FastCGI 拡張機能上で実行される PHP アプリケーションの完全な PHP 機能のサポートとパフォーマンスを実現することが、IIS チームの主な目標および中心的課題でした。当社の内部テストおよび Zend Technologies 社との協業を経て、FastCGI 拡張機能を使用して Windows 上で実行する場合に PHP アプリケーションの機能とパフォーマンスが最適化される FastCGI 拡張機能および PHP の構成設定を特定しました。

次の手順に従って、サーバーを構成します。

    1.  次のように php.ini ファイルを変更します。

  • fastcgi.impersonate = 1 と設定します。IIS の FastCGI では、呼び出しクライアントのセキュリティ トークンを偽装する機能がサポートされています。これにより、IIS では要求が実行されるセキュリティ コンテキストを定義できます。
  • cgi.fix_pathinfo=1 と設定します。cgi.fix_pathinfo では、CGI への本来の PATH_INFO/PATH_TRANSLATED がサポートされています。従来の PHP の動作では、PATH_TRANSLATED を「SCRIPT_FILENAME」に設定し、PATH_INFO の定義については配慮していませんでした。PATH_INFO の詳細については、CGI の仕様を参照してください。PATH_INFO を「1」に設定すると、仕様に準拠するように PHP CGI のパスが修正されます。
  • cgi.force_redirect = 0 と設定します。

    2.  fcgiconfig.js を次のように実行して、PHP セクションの FastCGI 構成設定を行います。

  • FastCGI プロセス プールのプロパティである InstanceMaxRequests を「10000」に設定します。この設定では、FastCGI 拡張機能が 10,000 個の要求を正常に処理した後で php-cgi.exe をリサイクルするように指定します。
> cscript fcgiconfig.js -set -section:"PHP" -InstanceMaxRequests:10000

    3.  FastCGI 拡張機能を構成して、PHP プロセスの環境変数 PHP_FCGI_MAX_REQUESTS を 10000 に設定します。この設定は、php-cgi.exe が 10,000 個の要求を正常に処理した後で php-cgi.exe 自身をリサイクルするように指定します。

> cscript fcgiconfig.js -set -section:"PHP" -EnvironmentVars:PHP_FCGI_MAX_REQUESTS:10000

メモ: InstanceMaxRequestsPHP_FCGI_MAX_REQUESTS には、10000 以外の数値を使用できます。一般的な規則として、InstanceMaxRequests の値は常に、PHP_FCGI_MAX_REQUESTS の値よりも小さくするか、等しくなるように設定してください。

PHP CGI のテスト

FastCGI 拡張機能をインストールし、PHP CGI の登録および構成を完了したら、通常どおり PHP アプリケーションを要求して使用できます。

テストを実行するには、サイトに以下のコードが記載された phpinfo.php ページを作成して要求します。

<?php
 
phpinfo();
 
?>

以下のようなページが表示されます。

Ff454028.file3_247(ja-jp,TechNet.10).png

[Server API] は、PHP が FastCGI モードでホストされていることを示します。

 

関連コンテンツ

記事

詳細情報

FastCGI 拡張機能の使用方法に関するご意見やバグの報告をお寄せいただく場合は、FastCGI フォーラムをご利用ください。

IIS での FastCGI に関する既知の問題の一覧については、既知の問題 (英語) を参照してください。

IIS での各種 PHP アプリケーションの実行に関する詳細については、次を参照してください。