2024 日本 PHP 研討會

在 Unix 系統上安裝 Lighttpd 1.4

本節包含在 Unix 系統上安裝 PHP 搭配 Lighttpd 1.4 的注意事項和提示。

在繼續之前,請使用 » Lighttpd 追蹤系統 學習如何正確安裝 Lighttpd。

FastCGI 是連接 PHP 和 Lighttpd 的首選 SAPI。FastCGI 在 php-cgi 中會自動啟用。

讓 Lighttpd 產生 php 行程

要設定 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 個回應程序)。

使用 spawn-fcgi 產生程序

Lighttpd 提供了一個名為 spawn-fcgi 的程式,可以簡化產生 FastCGI 程序的過程。

產生 php-cgi

雖然需要一些額外的工作,但也可以在不使用 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"

連線到遠端 FCGI 執行個體

FastCGI 執行個體可以產生在多台遠端機器上,以便擴展應用程式。

範例 #3 連線到遠端 php-fastcgi 執行個體

fastcgi.server = ( ".php" =>
   (( "host" => "10.0.0.2", "port" => 1030 ),
    ( "host" => "10.0.0.3", "port" => 1030 ))
)
新增註記

使用者貢獻的註記

此頁面沒有使用者貢獻的註記。
To Top