1 FPM(FastCGI 進(jìn)程管理器)用于替換 PHP FastCGI 的大部分附加功能,對于高負(fù)載網(wǎng)站是非常有用的纵刘。
它的功能包括:
● 支持平滑停止/啟動的高級進(jìn)程管理功能穴翩;
● 可以工作于不同的 uid/gid/chroot 環(huán)境下犬第,并監(jiān)聽不同的端口和使用不同的 php.ini 配置文件(可取代 safe_mode 的設(shè)置);
● stdout 和 stderr 日志記錄;
● 在發(fā)生意外情況的時(shí)候能夠重新啟動并緩存被破壞的 opcode;
● 文件上傳優(yōu)化支持;
● "慢日志" - 記錄腳本(不僅記錄文件名芒帕,還記錄 PHP backtrace 信息歉嗓,可以使用 ptrace或者類似工具讀取和分析遠(yuǎn)程進(jìn)程的運(yùn)行數(shù)據(jù))運(yùn)行所導(dǎo)致的異常緩慢;
● fastcgi_finish_request() - 特殊功能:用于在請求完成和刷新數(shù)據(jù)后,繼續(xù)在后臺執(zhí)行耗時(shí)的工作(錄入視頻轉(zhuǎn)換副签、統(tǒng)計(jì)處理等)遥椿;
● 動態(tài)/靜態(tài)子進(jìn)程產(chǎn)生;
● 基本 SAPI 運(yùn)行狀態(tài)信息(類似Apache的 mod_status)淆储;
● 基于 php.ini 的配置文件冠场。
2 從源代碼編譯
編譯 PHP 時(shí)需要 --enable-fpm 配置選項(xiàng)來激活 FPM 支持。
以下為 FPM 編譯的具體配置參數(shù)(全部為可選參數(shù)):
● --with-fpm-user - 設(shè)置 FPM 運(yùn)行的用戶身份(默認(rèn) - nobody)
● --with-fpm-group - 設(shè)置 FPM 運(yùn)行時(shí)的用戶組(默認(rèn) - nobody)
● --with-fpm-systemd - 啟用 systemd 集成 (默認(rèn) - no)
● --with-fpm-acl - 使用POSIX 訪問控制列表 (默認(rèn) - no) 5.6.5版本起有效
3 配置
FPM 配置文件為 php-fpm.conf本砰,其語法類似 php.ini 碴裙。
1 php-fpm.conf 全局配置段
pid string
PID文件的位置。默認(rèn)為空点额。
error_log string
錯(cuò)誤日志的位置舔株。默認(rèn):安裝路徑 #INSTALL_PREFIX#/log/php-fpm.log。
log_level string
錯(cuò)誤級別还棱≡卮龋可用級別為:alert(必須立即處理),error(錯(cuò)誤情況)珍手,warning(警告情況)办铡,notice(一般重要信息),debug(調(diào)試信息)琳要。默認(rèn):notice寡具。
emergency_restart_threshold int
如果子進(jìn)程在 emergency_restart_interval 設(shè)定的時(shí)間內(nèi)收到該參數(shù)設(shè)定次數(shù)的 SIGSEGV 或者 SIGBUS退出信息號,則FPM會重新啟動稚补。0 表示“關(guān)閉該功能”童叠。默認(rèn)值:0(關(guān)閉)。
emergency_restart_interval mixed
emergency_restart_interval 用于設(shè)定平滑重啟的間隔時(shí)間课幕。這么做有助于解決加速器中共享內(nèi)存的使用問題厦坛∥蹇澹可用單位:s(秒),m(分)杜秸,h(小時(shí))或者 d(天)拼余。默認(rèn)單位:s(秒)。默認(rèn)值:0(關(guān)閉)亩歹。
process_control_timeout mixed
設(shè)置子進(jìn)程接受主進(jìn)程復(fù)用信號的超時(shí)時(shí)間》渤鳎可用單位:s(秒)小作,m(分),h(小時(shí))或者 d(天)稼钩。默認(rèn)單位:s(秒)顾稀。默認(rèn)值:0(關(guān)閉)。
daemonize boolean
設(shè)置 FPM 在后臺運(yùn)行坝撑。設(shè)置“no”將 FPM 保持在前臺運(yùn)行用于調(diào)試静秆。默認(rèn)值:yes。
2 運(yùn)行配置區(qū)段
在FPM中巡李,可以使用不同的設(shè)置來運(yùn)行多個(gè)進(jìn)程池抚笔。 這些設(shè)置可以針對每個(gè)進(jìn)程池單獨(dú)設(shè)置。
listen string
設(shè)置接受 FastCGI 請求的地址侨拦∈獬龋可用格式為:'ip:port','port'狱从,'/path/to/unix/socket'膨蛮。每個(gè)進(jìn)程池都需要設(shè)置。
listen.backlog int
設(shè)置 listen(2) 的半連接隊(duì)列長度季研〕ǜ穑“-1”表示無限制。默認(rèn)值:-1与涡。
listen.allowed_clients string
設(shè)置允許連接到 FastCGI 的服務(wù)器 IPV4 地址惹谐。等同于 PHP FastCGI (5.2.2+) 中的 FCGI_WEB_SERVER_ADDRS 環(huán)境變量。僅對 TCP 監(jiān)聽起作用递沪。每個(gè)地址是用逗號分隔豺鼻,如果沒有設(shè)置或者為空,則允許任何服務(wù)器請求連接款慨。默認(rèn)值:any儒飒。
listen.owner string
如果使用,表示設(shè)置 Unix 套接字的權(quán)限檩奠。在Linux中桩了,讀寫權(quán)限必須設(shè)置附帽,以便用于 WEB 服務(wù)器連接。在很多 BSD 派生的系統(tǒng)中可以忽略權(quán)限允許自由連接井誉。默認(rèn)值:運(yùn)行所使用的用戶和組蕉扮,權(quán)限為 0666。
listen.group string
listen.mode string
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)請求時(shí)骄恶,與 dynamic 相反食铐,pm.start_servers 在服務(wù)啟動時(shí)即啟動。
dynamic - 子進(jìn)程的數(shù)量在下面配置的基礎(chǔ)上動態(tài)設(shè)置:pm.max_children僧鲁,pm.start_servers璃岳,pm.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ù)的請求數(shù)限制犁柜。類似 Apache 的 mpm_prefork 中 MaxClients 的設(shè)置和 普通PHP FastCGI中的 PHP_FCGI_CHILDREN 環(huán)境變量。
pm.start_servers in
設(shè)置啟動時(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.max_requests int
設(shè)置每個(gè)子進(jìn)程重生之前服務(wù)的請求數(shù)。對于可能存在內(nèi)存泄漏的第三方模塊來說是非常有用的硝全。如果設(shè)置為 '0' 則一直接受請求栖雾,等同于 PHP_FCGI_MAX_REQUESTS 環(huán)境變量。默認(rèn)值:0伟众。
pm.status_path string
FPM 狀態(tài)頁面的網(wǎng)址析藕。如果沒有設(shè)置,則無法訪問狀態(tài)頁面凳厢,默認(rèn)值:無账胧。
ping.path string
FPM 監(jiān)控頁面的 ping 網(wǎng)址。如果沒有設(shè)置先紫,則無法訪問 ping 頁面找爱。該頁面用于外部檢測 FPM 是否存活并且可以響應(yīng)請求。請注意必須以斜線開頭(/)泡孩。
ping.response string
用于定義 ping 請求的返回響應(yīng)。返回為 HTTP 200 的 text/plain 格式文本寺谤。默認(rèn)值:pong仑鸥。
request_terminate_timeout mixed
設(shè)置單個(gè)請求的超時(shí)中止時(shí)間。該選項(xiàng)可能會對 php.ini 設(shè)置中的 'max_execution_time' 因?yàn)槟承┨厥庠驔]有中止運(yùn)行的腳本有用变屁。設(shè)置為 '0' 表示 'Off'眼俊。可用單位:s(秒)粟关,m(分)疮胖,h(小時(shí))或者 d(天)。默認(rèn)單位:s(秒)闷板。默認(rèn)值:0(關(guān)閉)澎灸。
request_slowlog_timeout mixed
當(dāng)一個(gè)請求該設(shè)置的超時(shí)時(shí)間后,就會將對應(yīng)的 PHP 調(diào)用堆棧信息完整寫入到慢日志中遮晚。設(shè)置為 '0' 表示 'Off'性昭。可用單位:s(秒)县遣,m(分)糜颠,h(小時(shí))或者 d(天)。默認(rèn)單位:s(秒)萧求。默認(rèn)值:0(關(guān)閉)其兴。
slowlog string
慢請求的記錄日志。默認(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
啟動時(shí)的 Chroot 目錄盐茎。所定義的目錄需要是絕對路徑。如果沒有設(shè)置徙赢,則 chroot 不被使用字柠。
chdir string
設(shè)置啟動目錄,啟動時(shí)會自動 Chdir 到該目錄狡赐。所定義的目錄需要是絕對路徑窑业。默認(rèn)值:當(dāng)前目錄,或者根目錄(chroot時(shí))枕屉。
catch_workers_output boolean
重定向運(yùn)行過程中的 stdout 和 stderr 到主要的錯(cuò)誤日志文件中常柄。如果沒有設(shè)置,stdout 和 stderr 將會根據(jù) FastCGI 的規(guī)則被重定向到 /dev/null搀擂。默認(rèn)值:無西潘。