本節包含在 Unix 系統上安裝 PHP 搭配 Lighttpd 1.4 的注意事項和提示。
在繼續之前,請使用 » Lighttpd 追蹤系統 學習如何正確安裝 Lighttpd。
FastCGI 是連接 PHP 和 Lighttpd 的首選 SAPI。FastCGI 在 php-cgi 中會自動啟用。
要設定 Lighttpd 連接到 PHP 並產生 FastCGI 行程,請編輯 lighttpd.conf。建議使用 Socket 來連接到本機系統上的 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 )) )
`<var class="filename">bin-path</var>` 指令允許 lighttpd 動態產生 FastCGI 程序。PHP 將根據 `<var class="envar">PHP_FCGI_CHILDREN</var>` 環境變數產生子程序。`<code class="literal">bin-environment</code>` 指令設定產生程序的環境。當處理的請求數量達到 `<var class="envar">PHP_FCGI_MAX_REQUESTS</var>` 指定的值時,PHP 將會終止子程序。對於 PHP 而言,通常應避免使用 `<code class="literal">min-procs</code>` 和 `<code class="literal">max-procs</code>` 指令。PHP 會自行管理其子程序,而且像 APC 這樣的 opcode 快取機制只會在 PHP 管理的子程序之間共享。如果將 `<code class="literal">min-procs</code>` 設定為大於 `<code class="literal">1</code>` 的值,則 php 回應程序的總數將會乘以 `<var class="envar">PHP_FCGI_CHILDREN</var>` 的值(例如 2 個 min-procs * 16 個子程序將會產生 32 個回應程序)。
Lighttpd 提供了一個名為 spawn-fcgi 的程式,可以簡化產生 FastCGI 程序的過程。
雖然需要一些額外的工作,但也可以在不使用 spawn-fcgi 的情況下產生程序。設定 `<var class="envar">PHP_FCGI_CHILDREN</var>` 環境變數可以控制 PHP 將產生多少子程序來處理傳入的請求。設定 `<var class="envar">PHP_FCGI_MAX_REQUESTS</var>` 將決定每個子程序的存活時間(以請求數量計算)。以下是一個簡單的 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"
FastCGI 執行個體可以產生在多台遠端機器上,以便擴展應用程式。
範例 #3 連線到遠端 php-fastcgi 執行個體
fastcgi.server = ( ".php" => (( "host" => "10.0.0.2", "port" => 1030 ), ( "host" => "10.0.0.3", "port" => 1030 )) )