私は常に PHP を ISAPI モードで実行していましたが、この方法の最大の欠点は、PHP に問題が発生すると、Apache プロセスも停止してしまうことです。その後、FastCGI モードで実行される PHP についての紹介をインターネットで目にし、さまざまな利点 (安定性、セキュリティ、高性能) が挙げられていたため、試してみることにしました。
しかし、事態は期待ほどスムーズにはいきませんでした。 Google で何度も検索しましたが、Apache + FastCGI を使用して Windows で PHP を実行する方法に関する情報は見つかりませんでした。IIS + FastCGI を使用して PHP を実行している人はかなりいます。記事の 1 つでは、Zend は PHP を FastCGI モードで実行することを推奨していると述べています ( http://phplens.com/phpeverywhere/fastcgi-php )。
数時間の探索の後、最終的に Apache 1.3 + FastCGI を実装して PHP を実行することに成功しました。
準備:
まずhttp://www.fastcgi.com/dist/にアクセスして、Apache 用の mod_fastcgi をダウンロードします。 mod_fastcgi-2.4.2-AP13.dllを使用しています。ダウンロード後、このファイルを Apache のモジュール ディレクトリにコピーします。
PHP (私は PHP-5.0.4 を使用しています) をダウンロードして解凍し、必要に応じて php.ini ファイルを変更します。 PHP ディレクトリから Windows ディレクトリにファイルをコピーする必要はないことに注意してください。
構成を変更します。
次に、httpd.conf ファイルを変更し、次の行を追加します。
LoadModule fastcgi_module modules/mod_fastcgi-2.4.2-AP13.dll
ScriptAlias /fcgi-php5/ "d:/usr/local/php-5.0.4/"
FastCgiServer "d:/usr/local/php-5.0.4/php-cgi.exe" -processes 3
# 注: ここでの -processes 3 は、3 つの php-cgi.exe プロセスを開始することを意味します。
# FastCgiServer の詳細なパラメータについては、FastCGI のドキュメントを参照してください。
AddType application/x-httpd-fastphp5 .php
アクション application/x-httpd-fastphp5 "/fcgi-php5/php-cgi.exe"
# 説明: PHP ファイルの場所に応じて、上記の 2 つの太字の単語を変更します。
変更が完了したら、Apache を再起動するだけです。
よくある質問:
私の多くの実験によると、最も一般的な問題は主にパスが原因で発生します。したがって、まず php.ini および httpd.conf ファイル内のすべてのパスが正しいかどうかを確認してください。 2 つ目は、PHP が以前にシステムにインストールされている場合は、C:Windowsphp.ini の名前を変更するか削除する必要があることです。
次に、PHP ファイルが配置されているディレクトリに十分なアクセス許可があるかどうかを確認します (私はそれをEveryone - フル コントロールに設定しました。とにかく、開発マシンではそれほど多くのセキュリティ制限を考慮する必要はありません)。
PHP を FastCGI モードで実行する利点:
PHP を FastCGI モードで実行すると、いくつかの大きな利点があります。 1 つ目は、PHP が失敗した場合、Apache はダウンしませんが、PHP 自体のプロセスがクラッシュします (ただし、FastCGI は、クラッシュしたプロセスを置き換えるために新しい PHP プロセスをすぐに再起動します)。次に、FastCGI モードは、PHP 実行時のパフォーマンスが ISAPI モードよりも優れています (最初は ApacheBench を使用してテストしましたが、結果を保存するのを忘れました。興味がある場合は、自分でテストできます)。
最後に、PHP5 と PHP4 を同時に実行できます。以下の構成ファイルを参照して、2 つの仮想ホストが確立され、1 つは PHP5 を使用し、もう 1 つは PHP4 を使用しました。
LoadModule fastcgi_module modules/mod_fastcgi-2.4.2-AP13.dll
ScriptAlias /fcgi-php5/ "d:/usr/local/php-5.0.4/"
FastCgiServer "d:/usr/local/php-5.0.4/php-cgi.exe" -processes 3
ScriptAlias /fcgi-php4/ "d:/usr/local/php-4.3.11/"
FastCgiServer "d:/usr/local/php-4.3.11/php.exe"
リッスン 80
名前仮想ホスト *:80
ドキュメントルート d:/www
オプション インデックス FollowSymlinks マルチビュー
サーバー名 php5.localhost
AddType application/x-httpd-fastphp5 .php
アクション application/x-httpd-fastphp5 "/fcgi-php5/php-cgi.exe"
IndexOptions Fancyフォルダーのインデックス作成First
オプション インデックス FollowSymLinks マルチビュー
なし
注文の許可、拒否
すべてから許可する
8080 を聞いてください
名前仮想ホスト *:8080
DocumentRootd:/www
オプション インデックス FollowSymlinks マルチビュー
サーバー名 php4.localhost
AddType application/x-httpd-fastphp4 .php
アクション application/x-httpd-fastphp4 "/fcgi-php4/php.exe"
オプション インデックス FollowSymLinks マルチビュー
なし
注文の許可、拒否
すべてから許可する
上記の構成を使用すると、 http://localhost/にアクセスする場合は PHP5 が使用され、 http://localhost:8080/にアクセスする場合は PHP4 が使用されます。したがって、適切に構成されていれば、異なる仮想ホストで異なるバージョンの PHP を使用できます。
FastCGI モードのいくつかの欠点:
メリットについて話した後は、デメリットについて話しましょう。実際に使用したところ、FastCGI モードは実稼働環境のサーバーに適しています。ただし、開発マシンには適していません。 Zend Studio を使用してプログラムをデバッグすると、FastCGI は PHP プロセスがタイムアウトしたと判断し、ページ上で 500 エラーを返すためです。これは非常に面倒だったので、開発マシンで ISAPI モードに戻しました。
最後に、Windows の FastCGI モードには潜在的なセキュリティ脆弱性があります。 Windows 環境で SuEXEC を実装する方法が見つからないため、PHP プロセスは常に最高の特権で実行されますが、これはセキュリティの観点から明らかに良いニュースではありません。
結論:
この記事での FastCGI の適用はまだ非常に準備段階にあり、より成熟したソリューションが出現することを期待して、出発点としてのみ使用されます。