前回の「Nginxの最新版ソースから バイナリパッケージ(rpm)を作成し、インストールする」に続けて、nginxと一緒にPHPを動作させたいと思います。
nginxと一緒にPHPを動作させるには、apacheのような超有名ウェブサーバーのようにapache側の設定を行えば動作するようなものではありません。
また、apacheと同一プロセスで動作させることができるモジュール版phpなども存在しません。
nginxでは、全て自前でphp-cgiを動作(常駐)させてあげないといけません。
つまり、nginxは、phpの処理要求が発生したら、常駐しているphp-cgiのプロセスに処理要求を行うことになります。
そのため、nginxからの要求をphp-cgiへ伝えてやるプログラムが間に必要になります。
そのプラグラムの代表的なものが以下の2つです。
- spawn-fcgi → php-cgi
spawn-fcgiは、
FastCGIプロセスを生成するための、ちょっとしたヘルパープログラムです。 これは、FastCGIをソケット(UnixドメインやTCP)にバインドします。そしてユーザーやグループを切り替えたり、 chrootを使用したり、デーモン化したり、Unixドメインソケットに対してchmodやchownを使ったりすることで、環境を設定します。 生成されたバックエンドはlighttpdやnginx、cherokeeのようなWebサーバーから使うことができます。 (出典: http://sourceforge.jp/projects/freshmeat_spawn-fcgi/ )
- php-fpm → php-cgi
PHP FPMとは、
FastCGI Process Manager の略で、PHP の FastCGI 実装・管理を行うためのものです。 (バージョン5.3.3以降PHPの公式ディストリビューションにバンドルされています。)
主に高負荷のサイトで有用な追加機能を用意していて、以下のような機能(特徴)があります。
-
異なる uid/gid/chroot/environment でのワーカーの開始、 異なるポートでのリスン、異なる php.ini の使用 (safe_mode の代替)
-
標準出力および標準エラー出力へのログ出力
-
opcode キャッシュが壊れた場合の緊急再起動
-
高速なアップロードのサポート
-
“slowlog” – 実行時間が非常に長いスクリプトの記録 (スクリプト名だけでなく、PHP バックトレースも記録します。バックトレースを取得するために、 ptrace やそれと同等の仕組みを使ってリモートプロセスの execute_data を読みます)
-
fastcgi_finish_request() – リクエストを終わらせてすべてのデータを出力した後で 何か時間のかかる処理 (動画の変換や統計情報の処理など) をさせるための特殊な関数
-
動的/静的 な子プロセスの起動
-
基本的な SAPI の動作状況 (Apache の mod_status と同等)
-
php.ini ベースの設定ファイル
-
単純な違いは、
spawn-fcgiが、PHPと全く独立したプログラムで、FastCGIプロセス管理を行うのに対して
php-fpmは、PHPに一部機能を組み込んで、FastCGIプロセス管理を行います。
そのため、前者は、PHPのRPMをそのままインストールしても動作します。
しかし、後者は、PHPそのもののリビルドが必要になります。
今回は、PHP 5.3.3から正式にバンドルされた後者のphp-fpmを使ってみます。
ただし、PHP5.2系を使います。(まだまだ5.3では動作しないCMSもありますので。)
- 目次
- 履歴
2011年6月15日 初版
2012年5月22日, 11:00 AM
[…] […]
2012年5月22日, 7:08 PM
[…] こちらのサイトにもPHP-FPMの詳しい説明が書かれてありとても参考になった。 apache のかわりにnginxを使ってみる(2) php-fpmをインストールする […]