本節(jié)包括在 Unix 平臺(tái)的 Lighttpd 1.4 下安裝 PHP 的說明和提示。
推薦閱讀 ? Lighttpd trac 了解一下正確安裝 Lighttpd 然后繼續(xù)。
推薦使用 Fastcgi 作為 SAPI 模塊來連接 PHP 和 Lighttpd。在 PHP 5.3
中自動(dòng)激活了 Fastcgi,對(duì)于舊版本則在配置時(shí)使用
--enable-fastcgi。要確認(rèn) PHP 已激活 Fastcgi 可以使用命令
php -v
,應(yīng)該顯示 PHP 5.2.5 (cgi-fcgi)
。在
PHP 5.2.3 之前,F(xiàn)astcgi 是包含在 php 可執(zhí)行文件中(沒有 php-cgi 文件)。
要配置 Lighttpd 連接到 php 并產(chǎn)生 fastcgi 進(jìn)程,編輯 lighttpd.conf。推薦使用套接字在本機(jī)連接 fastcgi 進(jìn)程。
示例 #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 動(dòng)態(tài)產(chǎn)生 fastcgi 進(jìn)程。PHP 會(huì)根據(jù) PHP_FCGI_CHILDREN 環(huán)境變量產(chǎn)生子進(jìn)程。“bin-environment”指令設(shè)定了所產(chǎn)生的進(jìn)行的環(huán)境。PHP 會(huì)在達(dá)到 PHP_FCGI_MAX_REQUESTS 所指定的請求數(shù)目之后殺死一個(gè)子進(jìn)程。在 PHP 中通常應(yīng)避免“min-procs”和“max-procs”指令。PHP 自己管理其子進(jìn)程,并且例如 APC 之類的 opcode 緩存僅在 PHP 管理下的子進(jìn)程之間共享。如果“min-procs”被設(shè)定成某個(gè)大于 1 的值,則 PHP 應(yīng)答器的總數(shù)目為該值乘以 PHP_FCGI_CHILDREN(如 min-procs 為 2,PHP_FCGI_CHILDREN 為 16 則會(huì)產(chǎn)生 32 個(gè)應(yīng)答器)。
Lighttpd 提供一個(gè)名為 spawn-fcgi 的程序來簡化產(chǎn)生 fastcgi 進(jìn)程的手續(xù)。
有可能不通過 spawn-fcgi 來產(chǎn)生進(jìn)程,但需要做些工作。設(shè)定 PHP_FCGI_CHILDREN 環(huán)境變量控制了 PHP 產(chǎn)生多少個(gè)子進(jìn)程來處理請求。設(shè)定 PHP_FCGI_MAX_REQUESTS 將決定每個(gè)子進(jìn)程存活多久(以請求數(shù)目決定)。以下為一個(gè)簡單的 bash 腳本來幫助產(chǎn)生 php 應(yīng)答器。
示例 #2 產(chǎn)生 FastCGI 應(yīng)答器
#!/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"
Fastcgi 實(shí)例可被產(chǎn)生于多個(gè)遠(yuǎn)程機(jī)器以分散應(yīng)用程序。
示例 #3 連接遠(yuǎn)程 php-fastcgi 實(shí)例
fastcgi.server = ( ".php" => (( "host" => "10.0.0.2", "port" => 1030 ), ( "host" => "10.0.0.3", "port" => 1030 )) )