PHP 8.4.1 Released!

Lighttpd 1.4 (Unix システム用)

ここでは、Unix システム上の Lighttpd 1.4 で PHP を使用する際の注意点とヒントをまとめます。

まず » Lighttpd trac で Lighttpd のインストール方法をよく読んでからこれ以降に進みましょう。

PHP と Lighttpd を組み合わせる際におすすめの SAPI は FastCGI です。 FastCGI は、php-cgi では自動的に有効になります。

Lighttpd に php プロセスを起動させる

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-procs1 より大きい値に設定すると、 PHP レスポンダの数が PHP_FCGI_CHILDREN にその値をかけたものとなります (2 min-procs * 16 子プロセスで 32 のレスポンダとなります)。

spawn-fcgi での起動

Lighttpd には spawn-fcgi というプログラムが含まれており、 FastCGI プロセスの起動を簡単に行えるようになっています。

php-cgi の起動

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"

リモートの FCGI インスタンスへの接続

FastCGI インスタンスを複数のリモートマシンで起動して、 アプリケーションの規模を拡大することができます。

例3 リモートの php-fastcgi インスタンスへの接続

fastcgi.server = ( ".php" =>
   (( "host" => "10.0.0.2", "port" => 1030 ),
    ( "host" => "10.0.0.3", "port" => 1030 ))
)
add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top