Unix 平臺的 Lighttpd 1.4

本節(jié)包括在 Unix 平臺的 Lighttpd 1.4 下安裝 PHP 的說明和提示。

推薦閱讀 ? Lighttpd trac 了解一下正確安裝 Lighttpd 然后繼續(xù)。

推薦使用 Fastcgi 作為 SAPI 模塊來連接 PHP 和 Lighttpd。在 PHP 5.3 中自動激活了 Fastcgi,對于舊版本則在配置時使用 --enable-fastcgi。要確認 PHP 已激活 Fastcgi 可以使用命令 php -v,應該顯示 PHP 5.2.5 (cgi-fcgi)。在 PHP 5.2.3 之前,F(xiàn)astcgi 是包含在 php 可執(zhí)行文件中(沒有 php-cgi 文件)。

使 Lighttpd 產生 php 進程

要配置 Lighttpd 連接到 php 并產生 fastcgi 進程,編輯 lighttpd.conf。推薦使用套接字在本機連接 fastcgi 進程。

示例 #1 Partial 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 動態(tài)產生 fastcgi 進程。PHP 會根據 PHP_FCGI_CHILDREN 環(huán)境變量產生子進程?!癰in-environment”指令設定了所產生的進行的環(huán)境。PHP 會在達到 PHP_FCGI_MAX_REQUESTS 所指定的請求數目之后殺死一個子進程。在 PHP 中通常應避免“min-procs”和“max-procs”指令。PHP 自己管理其子進程,并且例如 APC 之類的 opcode 緩存僅在 PHP 管理下的子進程之間共享。如果“min-procs”被設定成某個大于 1 的值,則 PHP 應答器的總數目為該值乘以 PHP_FCGI_CHILDREN(如 min-procs 為 2,PHP_FCGI_CHILDREN 為 16 則會產生 32 個應答器)。

通過 spawn-fcgi 產生進程

Lighttpd 提供一個名為 spawn-fcgi 的程序來簡化產生 fastcgi 進程的手續(xù)。

產生 php-cgi

有可能不通過 spawn-fcgi 來產生進程,但需要做些工作。設定 PHP_FCGI_CHILDREN 環(huán)境變量控制了 PHP 產生多少個子進程來處理請求。設定 PHP_FCGI_MAX_REQUESTS 將決定每個子進程存活多久(以請求數目決定)。以下為一個簡單的 bash 腳本來幫助產生 php 應答器。

示例 #2 產生 FastCGI 應答器

#!/bin/sh

# Location of the php-cgi binary
PHP=/usr/local/bin/php-cgi

# PID File location
PHP_PID=/tmp/php.pid

# Binding to an address
#FCGI_BIND_ADDRESS=10.0.1.1:10000
# Binding to a domain socket
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 ))
)