配置

FPM 使用類似 php.ini 語(yǔ)法的 php-fpm.conf 和進(jìn)程池配置文件。

php-fpm.conf 全局配置段

pid string

PID 文件的位置。默認(rèn)為空。

error_log string

錯(cuò)誤日志的位置。默認(rèn):#INSTALL_PREFIX#/log/php-fpm.log。 如果設(shè)置為 "syslog",日志將不會(huì)寫入本地文件,而是發(fā)送到 syslogd。

log_level string

錯(cuò)誤級(jí)別。可用級(jí)別為:alert(必須立即處理),error(錯(cuò)誤情況),warning(警告情況),notice(一般重要信息),debug(調(diào)試信息)。默認(rèn):notice。

log_limit int

日志記錄行的限制,允許記錄超過(guò) 1024 個(gè)字符的消息而不需要換行。 默認(rèn)值:1024。 PHP 7.3.0 起可用。

log_buffering bool

實(shí)驗(yàn)性:沒(méi)有額外緩沖的日志記錄。 默認(rèn)值:yes。 PHP 7.3.0 后可用。

syslog.facility string

設(shè)置何種程序記錄消息,默認(rèn)值:daemon。

syslog.ident string

為每條信息添加前綴。 如果在同一臺(tái)服務(wù)器上運(yùn)行了多個(gè) FPM 實(shí)例,可以修改此默認(rèn)值來(lái)滿足需求。默認(rèn)值:php-fpm。

emergency_restart_threshold int

如果子進(jìn)程在 emergency_restart_interval 設(shè)定的時(shí)間內(nèi)收到該參數(shù)設(shè)定次數(shù)的 SIGSEGV 或者 SIGBUS退出信息號(hào),則FPM會(huì)重新啟動(dòng)。0 表示“關(guān)閉該功能”。默認(rèn)值:0(關(guān)閉)。

emergency_restart_interval mixed

emergency_restart_interval 用于設(shè)定平滑重啟的間隔時(shí)間。這么做有助于解決加速器中共享內(nèi)存的使用問(wèn)題??捎脝挝唬簊(秒),m(分),h(小時(shí))或者 d(天)。默認(rèn)單位:s(秒)。默認(rèn)值:0(關(guān)閉)。

process_control_timeout mixed

設(shè)置子進(jìn)程接受主進(jìn)程復(fù)用信號(hào)的超時(shí)時(shí)間。可用單位:s(秒),m(分),h(小時(shí))或者 d(天)。默認(rèn)單位:s(秒)。默認(rèn)值:0(關(guān)閉)。

process.max int

Fork 的最大 FPM 進(jìn)程數(shù)。使用動(dòng)態(tài)管理進(jìn)程數(shù)時(shí),此設(shè)計(jì)可以控制在一個(gè)進(jìn)程池內(nèi)的全局進(jìn)程數(shù)量。 使用需謹(jǐn)慎。默認(rèn)值:0。

process.priority int

設(shè)置 master 進(jìn)程的 nice(2) 優(yōu)先級(jí)(如果設(shè)置了此值)。 可以是 -19(最高優(yōu)先級(jí))到 20 (更低優(yōu)先級(jí))。 默認(rèn)值:不設(shè)置。

daemonize bool

設(shè)置 FPM 在后臺(tái)運(yùn)行。設(shè)置“no”將 FPM 保持在前臺(tái)運(yùn)行用于調(diào)試。默認(rèn)值:yes。

rlimit_files int

設(shè)置 master 進(jìn)程的打開文件描述符 rlimit 數(shù)。 默認(rèn)值:系統(tǒng)定義值。

rlimit_core int

設(shè)置 master 進(jìn)程最大 core 的 rlimit 尺寸。 默認(rèn)值:0。

events.mechanism string

設(shè)置 FPM 使用的事件機(jī)制。 可用以下選項(xiàng):select、pool、epoll、kqueue (*BSD)、port (Solaris)。 默認(rèn)值:不設(shè)置(自動(dòng)檢測(cè))

systemd_interval int

使用 systemd 集成的 FPM 時(shí),設(shè)置間歇秒數(shù),報(bào)告健在通知給 systemd。 設(shè)置為 0 表示禁用。默認(rèn)值:10。

運(yùn)行配置區(qū)段

在FPM中,可以使用不同的設(shè)置來(lái)運(yùn)行多個(gè)進(jìn)程池。 這些設(shè)置可以針對(duì)每個(gè)進(jìn)程池單獨(dú)設(shè)置。

listen string

設(shè)置接受 FastCGI 請(qǐng)求的地址??捎酶袷綖椋?ip:port','port','/path/to/unix/socket'。每個(gè)進(jìn)程池都需要設(shè)置。

listen.backlog int

設(shè)置 listen(2) 的 backlog 最大值?!?1”表示無(wú)限制。默認(rèn)值:-1。

listen.allowed_clients string

設(shè)置允許連接到 FastCGI 的服務(wù)器 IPV4 地址。等同于 PHP FastCGI (5.2.2+) 中的 FCGI_WEB_SERVER_ADDRS 環(huán)境變量。僅對(duì) TCP 監(jiān)聽起作用。每個(gè)地址是用逗號(hào)分隔,如果沒(méi)有設(shè)置或者為空,則允許任何服務(wù)器請(qǐng)求連接。默認(rèn)值:any。 支持 IPv6 地址。

listen.owner string

如果使用了 Unix 套接字,表示它的權(quán)限。在 Linux 中必須設(shè)置讀/寫權(quán)限,以便用于 WEB 服務(wù)器連接。 在很多 BSD 派生的系統(tǒng)中可以忽略權(quán)限允許自由連接。 默認(rèn)值:運(yùn)行所使用的用戶和組,權(quán)限為 0660。

listen.group string

參見(jiàn) listen.owner。

listen.mode string

參見(jiàn) listen.owner。

listen.acl_users string

當(dāng)系統(tǒng)支持 POSIX ACL(Access Control Lists)時(shí),可以設(shè)置使用此選項(xiàng)。 當(dāng)設(shè)置了的時(shí)候,將會(huì)忽略 listen.ownerlisten.group。 值是逗號(hào)分割的用戶名列表。

listen.acl_groups string

參見(jiàn) listen.acl_users。 值是逗號(hào)分割的用戶組名稱列表。

user string

FPM 進(jìn)程運(yùn)行的Unix用戶。必須設(shè)置。

group string

FPM 進(jìn)程運(yùn)行的 Unix 用戶組。如果不設(shè)置,就使用默認(rèn)用戶的用戶組。

pm string

設(shè)置進(jìn)程管理器如何管理子進(jìn)程。可用值:static,ondemand,dynamic。必須設(shè)置。

static - 子進(jìn)程的數(shù)量是固定的(pm.max_children)。

ondemand - 進(jìn)程在有需求時(shí)才產(chǎn)生(當(dāng)請(qǐng)求時(shí)才啟動(dòng)。與 dynamic 相反,在服務(wù)啟動(dòng)時(shí) pm.start_servers 就啟動(dòng)了。

dynamic - 子進(jìn)程的數(shù)量在下面配置的基礎(chǔ)上動(dòng)態(tài)設(shè)置:pm.max_children,pm.start_serverspm.min_spare_servers,pm.max_spare_servers。

pm.max_children int

pm 設(shè)置為 static 時(shí)表示創(chuàng)建的子進(jìn)程的數(shù)量,pm 設(shè)置為 dynamic 時(shí)表示最大可創(chuàng)建的子進(jìn)程的數(shù)量。必須設(shè)置。

該選項(xiàng)設(shè)置可以同時(shí)提供服務(wù)的請(qǐng)求數(shù)限制。類似 Apache 的 mpm_prefork 中 MaxClients 的設(shè)置和 普通PHP FastCGI中的 PHP_FCGI_CHILDREN 環(huán)境變量。

pm.start_servers in

設(shè)置啟動(dòng)時(shí)創(chuàng)建的子進(jìn)程數(shù)目。僅在 pm 設(shè)置為 dynamic 時(shí)使用。默認(rèn)值:min_spare_servers + (max_spare_servers - min_spare_servers) / 2。

pm.min_spare_servers int

設(shè)置空閑服務(wù)進(jìn)程的最低數(shù)目。僅在 pm 設(shè)置為 dynamic 時(shí)使用。必須設(shè)置。

pm.max_spare_servers int

設(shè)置空閑服務(wù)進(jìn)程的最大數(shù)目。僅在 pm 設(shè)置為 dynamic 時(shí)使用。必須設(shè)置。

pm.process_idle_timeout mixed

秒數(shù),多久之后結(jié)束空閑進(jìn)程。 僅當(dāng)設(shè)置 pmondemand。 可用單位:s(秒),m(分),h(小時(shí))或者 d(天)。默認(rèn)單位:10s。

pm.max_requests int

設(shè)置每個(gè)子進(jìn)程重生之前服務(wù)的請(qǐng)求數(shù)。對(duì)于可能存在內(nèi)存泄漏的第三方模塊來(lái)說(shuō)是非常有用的。如果設(shè)置為 '0' 則一直接受請(qǐng)求,等同于 PHP_FCGI_MAX_REQUESTS 環(huán)境變量。默認(rèn)值:0。

pm.status_path string

FPM 狀態(tài)頁(yè)面的網(wǎng)址。如果沒(méi)有設(shè)置,則無(wú)法訪問(wèn)狀態(tài)頁(yè)面,默認(rèn)值:無(wú)。

ping.path string

FPM 監(jiān)控頁(yè)面的 ping 網(wǎng)址。如果沒(méi)有設(shè)置,則無(wú)法訪問(wèn) ping 頁(yè)面。該頁(yè)面用于外部檢測(cè) FPM 是否存活并且可以響應(yīng)請(qǐng)求。請(qǐng)注意必須以斜線開頭(/)。

ping.response string

用于定義 ping 請(qǐng)求的返回響應(yīng)。返回為 HTTP 200 的 text/plain 格式文本。默認(rèn)值:pong。

process.priority int

設(shè)置 worker 的 nice(2)優(yōu)先級(jí)(如果設(shè)置了的話)。 該值從 -19(最高優(yōu)先級(jí)) 到 20(更低優(yōu)先級(jí))。 默認(rèn)值:不設(shè)置

process.dumpable bool

即使進(jìn)程用戶或者組跟主進(jìn)程用戶是不同的,也設(shè)置進(jìn)程可轉(zhuǎn)儲(chǔ)標(biāo)志 (PR_SET_DUMPABLE prctl)。 它允許為用戶池創(chuàng)建進(jìn)程 core dump 和 ptrace 進(jìn)程。 默認(rèn)值:no。自 PHP 7.0.29、7.1.17 和 7.2.5 起可用。

prefix string

檢測(cè)路徑時(shí)使用的前綴。

request_terminate_timeout mixed

設(shè)置單個(gè)請(qǐng)求的超時(shí)中止時(shí)間。該選項(xiàng)可能會(huì)對(duì) php.ini 設(shè)置中的 'max_execution_time' 因?yàn)槟承┨厥庠驔](méi)有中止運(yùn)行的腳本有用。設(shè)置為 '0' 表示 'Off'??捎脝挝唬簊(秒),m(分),h(小時(shí))或者 d(天)。默認(rèn)單位:s(秒)。默認(rèn)值:0(關(guān)閉)。

request_slowlog_timeout mixed

當(dāng)一個(gè)請(qǐng)求該設(shè)置的超時(shí)時(shí)間后,就會(huì)將對(duì)應(yīng)的 PHP 調(diào)用堆棧信息完整寫入到慢日志中。設(shè)置為 '0' 表示 'Off'??捎脝挝唬簊(秒),m(分),h(小時(shí))或者 d(天)。默認(rèn)單位:s(秒)。默認(rèn)值:0(關(guān)閉)。

slowlog string

慢請(qǐng)求的記錄日志。默認(rèn)值:#INSTALL_PREFIX#/log/php-fpm.log.slow。

rlimit_files int

設(shè)置文件打開描述符的 rlimit 限制。默認(rèn)值:系統(tǒng)定義值。

rlimit_core int

設(shè)置核心 rlimit 最大限制值??捎弥担?unlimited',0 或者正整數(shù)。默認(rèn)值:系統(tǒng)定義值。

chroot string

啟動(dòng)時(shí)的 Chroot 目錄。所定義的目錄需要是絕對(duì)路徑。如果沒(méi)有設(shè)置,則 chroot 不被使用。

chdir string

設(shè)置啟動(dòng)目錄,啟動(dòng)時(shí)會(huì)自動(dòng) Chdir 到該目錄。所定義的目錄需要是絕對(duì)路徑。默認(rèn)值:當(dāng)前目錄,或者根目錄(chroot時(shí))。

catch_workers_output bool

重定向運(yùn)行過(guò)程中的 stdout 和 stderr 到主要的錯(cuò)誤日志文件中。如果沒(méi)有設(shè)置,stdout 和 stderr 將會(huì)根據(jù) FastCGI 的規(guī)則被重定向到 /dev/null。默認(rèn)值:無(wú)。

decorate_workers_output bool

當(dāng) catch_workers_output 啟用時(shí), 為 worker 輸出啟用輸出裝飾。 默認(rèn)值:yes。 自 PHP 7.3.0 起可用。

clear_env bool

為 FPM worker 進(jìn)程清除環(huán)境變量。 在進(jìn)程池配置文件里設(shè)置環(huán)境變量前,阻止任意系統(tǒng)的環(huán)境變量進(jìn)入 FPM worker 進(jìn)程。 默認(rèn)值:Yes

security.limit_extensions string

限制 FPM 允許解析的腳本擴(kuò)展名。 此設(shè)置可以預(yù)防 web 服務(wù)器配置的錯(cuò)誤。 應(yīng)當(dāng)限制 FPM 僅僅解析 .php 擴(kuò)展名,阻止惡意用戶使用其他擴(kuò)展名運(yùn)行 php 代碼。 默認(rèn)值: .php .phar

access.log string

Access log 文件。 默認(rèn)值:不設(shè)置

access.format string

access log 的格式。 默認(rèn): "%R - %u %t \"%m %r\" %s"

可用選項(xiàng)
占位符 描述
%C %CPU
%d 持續(xù)時(shí)間 μs
%e fastcgi 環(huán)境變量
%f 腳本文件
%l 內(nèi)容長(zhǎng)度
%m 請(qǐng)求方法
%M 內(nèi)存
%n 進(jìn)程池(pool)名稱
%o header 輸出
%p PID
%q 查詢字符串
%Q %q 和 %r 之間的連接字符
%r 請(qǐng)求 URI
%R 遠(yuǎn)程 IP 地址
%s 狀態(tài)碼
%T 時(shí)間
%t 時(shí)間
%u 遠(yuǎn)程用戶

還可以在為一個(gè)運(yùn)行池傳遞附加的環(huán)境變量,或者更新 PHP 的配置值??梢栽谶M(jìn)程池配置文件中如下面的配置參數(shù)來(lái)做到:

示例 #1 給運(yùn)行池傳遞環(huán)境變量和設(shè)置 PHP 的配置值

env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com
php_flag[display_errors] = off
php_admin_value[error_log] = /var/log/fpm-php.www.log
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 32M
PHP配置值通過(guò) php_value 或者 php_flag 設(shè)置,并且會(huì)覆蓋以前的值。請(qǐng)注意 disable_functions 或者 disable_classesphp.ini 之中定義的值不會(huì)被覆蓋掉,但是會(huì)將新的設(shè)置附加在原有值的后面。

使用 php_admin_value 或者 php_admin_flag 定義的值,不能被 PHP 代碼中的 ini_set() 覆蓋。

可以通過(guò) web 服務(wù)器設(shè)置 PHP 的設(shè)定。

示例 #2 在 nginx.conf 中設(shè)定 PHP

set $php_value "pcre.backtrack_limit=424242";
set $php_value "$php_value \n pcre.recursion_limit=99999";
fastcgi_param  PHP_VALUE $php_value;

fastcgi_param  PHP_ADMIN_VALUE "open_basedir=/var/www/htdocs";
警告

由于這些設(shè)定是以 FastCGI 標(biāo)頭傳遞給 php-fpm,php-fpm 不應(yīng)綁定到外部網(wǎng)可以訪問(wèn)的地址上,否則任何人都能修改 PHP 的配置選項(xiàng)了。參見(jiàn) listen.allowed_clients

注意: 進(jìn)程池不是種安全機(jī)制,因?yàn)樗鼈儾粫?huì)完全隔離;例如:所有的進(jìn)程池會(huì)使用單個(gè) Opcache 實(shí)例。