ここでは、Unix システム上の Lighttpd 1.4 で PHP を使用する際の注意点とヒントをまとめます。
まず » Lighttpd trac で Lighttpd のインストール方法をよく読んでからこれ以降に進みましょう。
PHP と Lighttpd を組み合わせる際におすすめの SAPI は FastCGI です。 FastCGI は、php-cgi では自動的に有効になります。
Lighttpd から php に接続して FastCGI プロセスを立ち上げさせるように設定するには、 lighttpd.conf を編集します。 ローカルシステムの FastCGI プロセスに接続するにはソケットの使用をおすすめします。
例1 lighttpd.conf の抜粋
server.modules += ( "mod_fastcgi" ) fastcgi.server = ( ".php" => (( "socket" => "/tmp/php.socket", "bin-path" => "/usr/local/bin/php-cgi", "bin-environment" => ( "PHP_FCGI_CHILDREN" => "16", "PHP_FCGI_MAX_REQUESTS" => "10000" ), "min-procs" => 1, "max-procs" => 1, "idle-timeout" => 20 )) )
bin-path ディレクティブにより、lighttpd
が FastCGI プロセスを動的に起動できるようになります。
PHP は、環境変数 PHP_FCGI_CHILDREN の内容に応じて子プロセスを起動します。
bin-environment
ディレクティブは、起動するプロセスの環境を設定します。
リクエストの数が PHP_FCGI_MAX_REQUESTS の値に達すると、
PHP は子プロセスを kill します。ディレクティブ
min-procs
および max-procs
は、PHP での使用は避けるべきです。
PHP は自身の子プロセスを自前で管理しますし、
APC のような opcode キャッシュは PHP が管理する子プロセスしか共有しません。
min-procs
を 1
より大きい値に設定すると、
PHP レスポンダの数が PHP_FCGI_CHILDREN にその値をかけたものとなります
(2 min-procs * 16 子プロセスで 32 のレスポンダとなります)。
Lighttpd には spawn-fcgi というプログラムが含まれており、 FastCGI プロセスの起動を簡単に行えるようになっています。
spawn-fcgi なしでプロセスを起動することもできますが、多少難易度が上がります。 環境変数 PHP_FCGI_CHILDREN で、PHP がリクエストの処理用に起動する子の数を設定します。 PHP_FCGI_MAX_REQUESTS は、各子プロセスの生存期間 (リクエスト数) を設定します。php レスポンダを起動するシンプルな bash スクリプトの例を以下に示します。
例2 FastCGI レスポンダの起動
#!/bin/sh # php-cgi バイナリの場所 PHP=/usr/local/bin/php-cgi # PID ファイルの場所 PHP_PID=/tmp/php.pid # アドレスへのバインド #FCGI_BIND_ADDRESS=10.0.1.1:10000 # ドメインソケットへのバインド FCGI_BIND_ADDRESS=/tmp/php.sock PHP_FCGI_CHILDREN=16 PHP_FCGI_MAX_REQUESTS=10000 env -i PHP_FCGI_CHILDREN=$PHP_FCGI_CHILDREN \ PHP_FCGI_MAX_REQUESTS=$PHP_FCGI_MAX_REQUESTS \ $PHP -b $FCGI_BIND_ADDRESS & echo $! > "$PHP_PID"
FastCGI インスタンスを複数のリモートマシンで起動して、 アプリケーションの規模を拡大することができます。
例3 リモートの php-fastcgi インスタンスへの接続
fastcgi.server = ( ".php" => (( "host" => "10.0.0.2", "port" => 1030 ), ( "host" => "10.0.0.3", "port" => 1030 )) )