PHPFPM全配置解析

豎橫山發表於2023-04-04
; 該檔案中的所有配置均以分號 (;) 開頭,代表註釋行或不使用的指令

; 全域性配置
[global]
; 程式 ID 檔案位置,預設none
pid = /var/run/php-fpm.pid

; 錯誤日誌檔案位置,預設#INSTALL_PREFIX#/log/php-fpm.log
error_log = /var/log/php-fpm.log

; 日誌級別,列舉值:alert, error, warning, notice, debug,預設notice
log_level = notice

; 日誌限制每行字元數,預設1024,PHP>=7.3.0
log_limit = 1024

; 是否啟用日誌緩衝,如果啟用了 log_buffering,PHP-FPM 會將所有的日誌訊息快取在記憶體中,直到緩衝區填滿或達到了一定的時間限制,然後再將緩衝區中的所有訊息一次性寫入磁碟。預設yes,PHP>=7.3.0
log_buffering = yes

;60 秒檢查一次工作程式崩潰次數達到emergency_restart_threshold則重新啟動主程式。預設值0
emergency_restart_interval = 60s/1m/2h/3d

; 預設值為 0,表示禁用自動重啟。
emergency_restart_threshold = 0

; 指定 PHP-FPM 子程式可以響應來自主程式的控制訊號的最長時間,如果worker程式10s沒有相應則終止worker程式,預設為0s
process_control_timeout = 10s

; 當pm=dynamic時,指定可以生成的 PHP-FPM 子程式的最大數量,預設為0
process.max = 100

; 指定 PHP-FPM 子程式的優先順序,範圍-19-20,-19優先順序別最高,預設不設定
process.priority = -10

; 是否開啟守護程式,預設開啟
daemonize = yes

; 設定fpm能開啟的檔案描述符數,預設值為作業系統預設值
rlimit_files= 65532

; 用於限制 PHP-FPM 在發生崩潰時可以生成的core dump檔案的最大大小。預設為0不限制
rlimit_core = 100M

; 用於指定PHP-FPM使用的事件處理機制。
events.mechanism = epoll

; 用於控制 PHP-FPM 向 systemd 傳送狀態更新的頻率。systemd 使用這些更新來監控 PHP-FPM 程式的健康狀況並在必要時重新啟動它。
systemd_interval = 10

; 程式池配置
[pool]

; 預設監聽地址,接受FastCGI請求
; 可以是 Unix 套接字
listen = /run/php-fpm/php-fpm.sock
;TCP/IP 地址
listen = 127.0.0.1:9000

; FPM程式全連線佇列長度
; FreeBSD/OpenBSD預設值-1,意味著最大值
; Linux 預設值 511
listen.backlog = 1024

; IP白名單
listen.allowed_clients = 127.0.0.1, 192.168.1.0/24
listen.allowed_clients = *

; 設定FPM listen程式使用者和使用者組
listen.owner = www-data
listen.group = www-data
; 當使用unix.socket時的許可權
listen.mode = 0660

; 設定FPM worker程式使用者和使用者組
user = www-data
group = www-data

; 設定FPM管理子程式的模式

; dynamic : 動態模式,推薦用這個
pm = dynamic 
; 動態模式下建立的最大子程式數量
pm.max_children = 100 
; 動態模式下初始子程式數量,預設值為min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.start_servers = 10
; 動態模式下,當負載較低時保持至少10個空閒程式
pm.min_spare_servers = 10
; 動態模式下,當負載較高時保持最多20個空閒程式,工作中的子程式和空閒子程式的總數不超過pm.children
pm.max_spare_servers = 20
; 動態模式下生成自己子程式的速率,一次生成32個
pm.max_spawn_rate = 32

; static : 靜態模式,子程式的數量是固定的
pm = static 
; 靜態模式下固定10個子程式數量
pm.max_children = 10

; ondemand : 一次性模式,連線過來的時候再建立子程式
pm = ondemand
; 一次性模式模式下當子程式處理完畢,10s後刪除,預設10s
pm.process_idle_timeout = 10s

;子程式處理500個請求之後重啟,有效避免記憶體洩露,預設0
pm.max_requests = 500

; 啟用 FPM 狀態頁面,可以檢視當前執行的 PHP-FPM 工作程式的數量、記憶體使用情況、請求等待佇列的長度等。此外,還可以透過狀態頁面殺死或終止正在執行的程式、檢視請求詳情以及進行其他診斷操作。預設沒有開啟
; 透過以下配置之後,瀏覽器直接訪問http://127.0.0.1:9000/status即可
pm.status_listen = 127.0.0.1:9000
pm.status_path = /status

; 用於檢測 FPM 程式是否存活,當 Web 伺服器透過 FastCGI 協議向 FPM 傳送帶有 /ping 路徑的請求時,FPM 將會響應pong。
ping.path = /ping
ping.path = pong

; 用於指定 PHP-FPM 執行時檔案和其他檔案的安裝路徑字首。它的作用是將 PHP-FPM 安裝路徑與其他系統路徑分離開來,從而方便管理和維護。
prefix = /usr/local/php-fpm


; 當子程式處理單個請求超時60,請求結束之後,子程式會被終止,當php.ini選項`max_execution_time`由於某種原因沒有停止指令碼執行時將使用這個配置。預設0不開啟
request_terminate_timeout = 60s

; 當請求時間超過request_terminate_timeout時,如果配置開啟,則立刻終止程式,PHP 7.3.0 啟用。預設不開啟
request_terminate_timeout_track_finished = yes

; 開啟記錄請求慢日誌
slowlog = /usr/local/phpfpm/log/slow.log
; 超過10秒將被記入慢日誌,預設0標識禁用慢日誌功能
request_slowlog_timeout = 10s
; 記錄呼叫棧的深度,預設20,PHP>=7.2.0
request_slowlog_trace_depth = 20

;PHP-FPM 程式的根目錄更改為指定目錄。這意味著 PHP-FPM 程式將無法訪問根目錄之外的任何檔案或目錄。chroot 選項的值應該是一個絕對路徑,預設不啟用
chroot = /var/www

; 可以將 PHP-FPM 程式的當前工作目錄更改為指定目錄。這意味著 PHP-FPM 程式將在指定目錄中執行,而不是在根目錄中執行。
chdir = /var/www/example.com

; 是否將工作程式輸出重定向到主程式日誌。建議將其設定為yes,以便在出現問題時能夠更好地除錯。
catch_workers_output
; 是否在工作程式的日誌中新增字首。建議將其設定為no,以減少日誌大小並減少I/O操作。PHP >= 7.3.0
decorate_workers_output

; 是否清除工作程式環境中的所有變數。建議將其設定為yes,以確保環境變數的一致性並增加安全性。
clear_env = yes
; 允許執行的指令碼副檔名列表。建議將其設定為只包含必要的指令碼副檔名,以增強安全性。
security.limit_extensions = .php .html

; 記錄訪問日誌,預設不開啟
access.log = /var/log/access.log
; 訪問日誌格式
access.format = %R - %u %t \"%m %r\" %s

; 設定環境變數,可透過getenv()獲取 
; 設定 `HOSTNAME` 環境變數為主機名。
env[HOSTNAME] = $HOSTNAME
; 設定 `PATH` 環境變數為可執行檔案的搜尋路徑。
env[PATH] = /usr/local/bin:/usr/bin:/bin`
; 設定 `TMP` 環境變數為臨時資料夾的路徑。
env[TMP] = /tmp
; 設定ENV變數為生產環境,可透過
if (getenv('ENV') == 'product') 載入不同配置檔案
env[ENV] = product

; php_admin_value 可以設定任何PHP配置選項的值
; php_admin_flag 只能設定開/關型的選項。
; 兩者將覆蓋PHP.ini 配置檔案
; disable_functions / disable_classes無法覆蓋,只能追加
; ini_set()不能覆蓋 php_admin_value/php_admin_flag
php_admin_value[upload_max_filesize] = 100M
php_admin_value[post_max_size] = 100M
php_admin_value[error_log] = /var/log/fpm-php.www.log
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 32M
php_admin_value[disable_functions] = exec
本作品採用《CC 協議》,轉載必須註明作者和本文連結
遇強則強,太強另說

相關文章