FPM 使用類(lèi)似 php.ini 語(yǔ)法的 php-fpm.conf 和進(jìn)程池配置文件。
pid
string
PID 文件的位置。默認為空。
error_log
string
錯誤日志的位置。默認:#INSTALL_PREFIX#/log/php-fpm.log
。
如果設置為 "syslog",日志將不會(huì )寫(xiě)入本地文件,而是發(fā)送到 syslogd。
log_level
string
錯誤級別??捎眉墑e為:alert(必須立即處理),error(錯誤情況),warning(警告情況),notice(一般重要信息),debug(調試信息)。默認:notice。
log_limit
int
日志記錄行的限制,允許記錄超過(guò) 1024 個(gè)字符的消息而不需要換行。 默認值:1024。 PHP 7.3.0 起可用。
log_buffering
bool
實(shí)驗性:沒(méi)有額外緩沖的日志記錄。 默認值:yes。 PHP 7.3.0 后可用。
syslog.facility
string
設置何種程序記錄消息,默認值:daemon。
syslog.ident
string
為每條信息添加前綴。 如果在同一臺服務(wù)器上運行了多個(gè) FPM 實(shí)例,可以修改此默認值來(lái)滿(mǎn)足需求。默認值:php-fpm。
emergency_restart_threshold
int
如果子進(jìn)程在 emergency_restart_interval
設定的時(shí)間內收到該參數設定次數的
SIGSEGV 或者 SIGBUS退出信息號,則FPM會(huì )重新啟動(dòng)。0 表示“關(guān)閉該功能”。默認值:0(關(guān)閉)。
emergency_restart_interval
mixed
emergency_restart_interval
用于設定平滑重啟的間隔時(shí)間。這么做有助于解決加速器中共享內存的使用問(wèn)題??捎脝挝唬簊(秒),m(分),h(小時(shí))或者
d(天)。默認單位:s(秒)。默認值:0(關(guān)閉)。
process_control_timeout
mixed
設置子進(jìn)程接受主進(jìn)程復用信號的超時(shí)時(shí)間??捎脝挝唬簊(秒),m(分),h(小時(shí))或者 d(天)。默認單位:s(秒)。默認值:0(關(guān)閉)。
process.max
int
Fork 的最大 FPM 進(jìn)程數。使用動(dòng)態(tài)管理進(jìn)程數時(shí),此設計可以控制在一個(gè)進(jìn)程池內的全局進(jìn)程數量。 使用需謹慎。默認值:0。
process.priority
int
設置 master 進(jìn)程的 nice(2) 優(yōu)先級(如果設置了此值)。 可以是 -19(最高優(yōu)先級)到 20 (更低優(yōu)先級)。 默認值:不設置。
daemonize
bool
設置 FPM 在后臺運行。設置“no”將 FPM 保持在前臺運行用于調試。默認值:yes。
rlimit_files
int
設置 master 進(jìn)程的打開(kāi)文件描述符 rlimit 數。 默認值:系統定義值。
rlimit_core
int
設置 master 進(jìn)程最大 core 的 rlimit 尺寸。 默認值:0。
events.mechanism
string
設置 FPM 使用的事件機制。 可用以下選項:select、pool、epoll、kqueue (*BSD)、port (Solaris)。 默認值:不設置(自動(dòng)檢測)
systemd_interval
int
使用 systemd 集成的 FPM 時(shí),設置間歇秒數,報告健在通知給 systemd。 設置為 0 表示禁用。默認值:10。
在FPM中,可以使用不同的設置來(lái)運行多個(gè)進(jìn)程池。 這些設置可以針對每個(gè)進(jìn)程池單獨設置。
listen
string
設置接受 FastCGI 請求的地址??捎酶袷綖椋?ip:port','port','/path/to/unix/socket'。每個(gè)進(jìn)程池都需要設置。
listen.backlog
int
設置 listen(2) 的 backlog 最大值?!?1”表示無(wú)限制。默認值:-1。
listen.allowed_clients
string
設置允許連接到 FastCGI 的服務(wù)器 IPV4 地址。等同于 PHP FastCGI (5.2.2+) 中的 FCGI_WEB_SERVER_ADDRS 環(huán)境變量。僅對 TCP 監聽(tīng)起作用。每個(gè)地址是用逗號分隔,如果沒(méi)有設置或者為空,則允許任何服務(wù)器請求連接。默認值:any。 支持 IPv6 地址。
listen.owner
string
如果使用了 Unix 套接字,表示它的權限。在 Linux 中必須設置讀/寫(xiě)權限,以便用于 WEB 服務(wù)器連接。 在很多 BSD 派生的系統中可以忽略權限允許自由連接。 默認值:運行所使用的用戶(hù)和組,權限為 0660。
listen.group
string
參見(jiàn) listen.owner
。
listen.mode
string
參見(jiàn) listen.owner
。
listen.acl_users
string
當系統支持 POSIX ACL(Access Control Lists)時(shí),可以設置使用此選項。
當設置了的時(shí)候,將會(huì )忽略 listen.owner
和 listen.group
。
值是逗號分割的用戶(hù)名列表。
listen.acl_groups
string
參見(jiàn) listen.acl_users
。
值是逗號分割的用戶(hù)組名稱(chēng)列表。
user
string
FPM 進(jìn)程運行的Unix用戶(hù)。必須設置。
group
string
FPM 進(jìn)程運行的 Unix 用戶(hù)組。如果不設置,就使用默認用戶(hù)的用戶(hù)組。
pm
string
設置進(jìn)程管理器如何管理子進(jìn)程??捎弥担?code class="literal">static,ondemand
,dynamic
。必須設置。
static
- 子進(jìn)程的數量是固定的(pm.max_children
)。
ondemand
- 進(jìn)程在有需求時(shí)才產(chǎn)生(當請求時(shí)才啟動(dòng)。與
dynamic 相反,在服務(wù)啟動(dòng)時(shí) pm.start_servers
就啟動(dòng)了。
dynamic
-
子進(jìn)程的數量在下面配置的基礎上動(dòng)態(tài)設置:pm.max_children
,pm.start_servers
,pm.min_spare_servers
,pm.max_spare_servers
。
pm.max_children
int
pm
設置為 static
時(shí)表示創(chuàng )建的子進(jìn)程的數量,pm
設置為
dynamic
時(shí)表示最大可創(chuàng )建的子進(jìn)程的數量。必須設置。
該選項設置可以同時(shí)提供服務(wù)的請求數限制。類(lèi)似 Apache 的 mpm_prefork 中 MaxClients 的設置和 普通PHP FastCGI中的 PHP_FCGI_CHILDREN 環(huán)境變量。
pm.start_servers
in
設置啟動(dòng)時(shí)創(chuàng )建的子進(jìn)程數目。僅在 pm
設置為
dynamic
時(shí)使用。默認值:min_spare_servers + (max_spare_servers -
min_spare_servers) / 2。
pm.min_spare_servers
int
設置空閑服務(wù)進(jìn)程的最低數目。僅在 pm
設置為 dynamic
時(shí)使用。必須設置。
pm.max_spare_servers
int
設置空閑服務(wù)進(jìn)程的最大數目。僅在 pm
設置為 dynamic
時(shí)使用。必須設置。
pm.process_idle_timeout
mixed
秒數,多久之后結束空閑進(jìn)程。
僅當設置 pm
為 ondemand
。
可用單位:s(秒),m(分),h(小時(shí))或者
d(天)。默認單位:10s。
pm.max_requests
int
設置每個(gè)子進(jìn)程重生之前服務(wù)的請求數。對于可能存在內存泄漏的第三方模塊來(lái)說(shuō)是非常有用的。如果設置為 '0' 則一直接受請求,等同于 PHP_FCGI_MAX_REQUESTS 環(huán)境變量。默認值:0。
pm.status_path
string
FPM 狀態(tài)頁(yè)面的網(wǎng)址。如果沒(méi)有設置,則無(wú)法訪(fǎng)問(wèn)狀態(tài)頁(yè)面,默認值:無(wú)。
ping.path
string
FPM 監控頁(yè)面的 ping 網(wǎng)址。如果沒(méi)有設置,則無(wú)法訪(fǎng)問(wèn) ping 頁(yè)面。該頁(yè)面用于外部檢測 FPM 是否存活并且可以響應請求。請注意必須以斜線(xiàn)開(kāi)頭(/)。
ping.response
string
用于定義 ping 請求的返回響應。返回為 HTTP 200 的 text/plain 格式文本。默認值:pong。
process.priority
int
設置 worker 的 nice(2)優(yōu)先級(如果設置了的話(huà))。 該值從 -19(最高優(yōu)先級) 到 20(更低優(yōu)先級)。 默認值:不設置
process.dumpable
bool
即使進(jìn)程用戶(hù)或者組跟主進(jìn)程用戶(hù)是不同的,也設置進(jìn)程可轉儲標志 (PR_SET_DUMPABLE prctl)。 它允許為用戶(hù)池創(chuàng )建進(jìn)程 core dump 和 ptrace 進(jìn)程。 默認值:no。自 PHP 7.0.29、7.1.17 和 7.2.5 起可用。
prefix
string
檢測路徑時(shí)使用的前綴。
request_terminate_timeout
mixed
設置單個(gè)請求的超時(shí)中止時(shí)間。該選項可能會(huì )對 php.ini 設置中的 'max_execution_time' 因為某些特殊原因沒(méi)有中止運行的腳本有用。設置為 '0' 表示 'Off'??捎脝挝唬簊(秒),m(分),h(小時(shí))或者 d(天)。默認單位:s(秒)。默認值:0(關(guān)閉)。
request_slowlog_timeout
mixed
當一個(gè)請求該設置的超時(shí)時(shí)間后,就會(huì )將對應的 PHP 調用堆棧信息完整寫(xiě)入到慢日志中。設置為 '0' 表示 'Off'??捎脝挝唬簊(秒),m(分),h(小時(shí))或者 d(天)。默認單位:s(秒)。默認值:0(關(guān)閉)。
slowlog
string
慢請求的記錄日志。默認值:#INSTALL_PREFIX#/log/php-fpm.log.slow
。
rlimit_files
int
設置文件打開(kāi)描述符的 rlimit 限制。默認值:系統定義值。
rlimit_core
int
設置核心 rlimit 最大限制值??捎弥担?unlimited',0 或者正整數。默認值:系統定義值。
chroot
string
啟動(dòng)時(shí)的 Chroot 目錄。所定義的目錄需要是絕對路徑。如果沒(méi)有設置,則 chroot 不被使用。
chdir
string
設置啟動(dòng)目錄,啟動(dòng)時(shí)會(huì )自動(dòng) Chdir 到該目錄。所定義的目錄需要是絕對路徑。默認值:當前目錄,或者根目錄(chroot時(shí))。
catch_workers_output
bool
重定向運行過(guò)程中的 stdout 和 stderr 到主要的錯誤日志文件中。如果沒(méi)有設置,stdout 和 stderr 將會(huì )根據 FastCGI 的規則被重定向到 /dev/null。默認值:無(wú)。
decorate_workers_output
bool
當 catch_workers_output 啟用時(shí), 為 worker 輸出啟用輸出裝飾。 默認值:yes。 自 PHP 7.3.0 起可用。
clear_env
bool
為 FPM worker 進(jìn)程清除環(huán)境變量。 在進(jìn)程池配置文件里設置環(huán)境變量前,阻止任意系統的環(huán)境變量進(jìn)入 FPM worker 進(jìn)程。 默認值:Yes
security.limit_extensions
string
限制 FPM 允許解析的腳本擴展名。 此設置可以預防 web 服務(wù)器配置的錯誤。 應當限制 FPM 僅僅解析 .php 擴展名,阻止惡意用戶(hù)使用其他擴展名運行 php 代碼。 默認值: .php .phar
access.log
string
Access log 文件。 默認值:不設置
access.format
string
access log 的格式。
默認: "%R - %u %t \"%m %r\" %s"
:
占位符 | 描述 |
---|---|
%C
|
%CPU |
%d
|
持續時(shí)間 μs |
%e
|
fastcgi 環(huán)境變量 |
%f
|
腳本文件 |
%l
|
內容長(cháng)度 |
%m
|
請求方法 |
%M
|
內存 |
%n
|
進(jìn)程池(pool)名稱(chēng) |
%o
|
header 輸出 |
%p
|
PID |
%q
|
查詢(xún)字符串 |
%Q
|
%q 和 %r 之間的連接字符 |
%r
|
請求 URI |
%R
|
遠程 IP 地址 |
%s
|
狀態(tài)碼 |
%T
|
時(shí)間 |
%t
|
時(shí)間 |
%u
|
遠程用戶(hù) |
還可以在為一個(gè)運行池傳遞附加的環(huán)境變量,或者更新 PHP 的配置值??梢栽谶M(jìn)程池配置文件中如下面的配置參數來(lái)做到:
示例 #1 給運行池傳遞環(huán)境變量和設置 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_value
或者
php_flag
設置,并且會(huì )覆蓋以前的值。請注意
disable_functions 或者
disable_classes 在
php.ini 之中定義的值不會(huì )被覆蓋掉,但是會(huì )將新的設置附加在原有值的后面。
使用 php_admin_value
或者 php_admin_flag
定義的值,不能被 PHP 代碼中的 ini_set() 覆蓋。
可以通過(guò) web 服務(wù)器設置 PHP 的設定。
示例 #2 在 nginx.conf 中設定 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";
由于這些設定是以 FastCGI 標頭傳遞給 php-fpm,php-fpm 不應綁定到外部網(wǎng)可以訪(fǎng)問(wèn)的地址上,否則任何人都能修改 PHP 的配置選項了。參見(jiàn) listen.allowed_clients。
注意: 進(jìn)程池不是種安全機制,因為它們不會(huì )完全隔離;例如:所有的進(jìn)程池會(huì )使用單個(gè) Opcache 實(shí)例。