⚙️ PHP-FPM
高效能 PHP FastCGI 程序管理員
PHP-FPM(FastCGI Process Manager)是 PHP 的 FastCGI 實作,搭配 Nginx 提供高效能 PHP 應用服務,支援多程序池隔離,避免單站故障影響整體。
安裝
$ sudo apt update && sudo apt install -y php8.3-fpm php8.3-mysql php8.3-redis \
php8.3-mbstring php8.3-xml php8.3-curl php8.3-zip php8.3-gd
sudo systemctl enable --now php8.3-fpm$ php --version && php-fpm8.3 --version程序池設定(/etc/php/8.3/fpm/pool.d/www.conf)
[www]
user = www-data
group = www-data
; 使用 Unix socket(比 TCP 效能更好)
listen = /run/php/php8.3-fpm.sock
listen.owner = www-data
listen.group = www-data
; 動態程序管理(依負載自動調整)
pm = dynamic
pm.max_children = 20 ; 最多子程序數(RAM / 每程序使用量)
pm.start_servers = 4 ; 啟動時建立的程序數
pm.min_spare_servers = 2 ; 最少閒置程序
pm.max_spare_servers = 6 ; 最多閒置程序
pm.max_requests = 500 ; 每個程序處理 500 請求後重啟(防止記憶體洩漏)
; 慢請求日誌
request_slowlog_timeout = 5s
slowlog = /var/log/php8.3-fpm-slow.log與 Nginx 整合
server {
listen 80;
server_name example.com;
root /var/www/example.com;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# 效能優化
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
}
# 禁止直接存取敏感檔案
location ~ /\.(ht|git) { deny all; }
}$ sudo nginx -t && sudo systemctl reload nginxphp.ini 常用設定(/etc/php/8.3/fpm/php.ini)
; 記憶體限制
memory_limit = 256M
; 上傳限制(需同時調整 Nginx 的 client_max_body_size)
upload_max_filesize = 50M
post_max_size = 50M
; 執行時間
max_execution_time = 60
; 顯示錯誤(開發用,生產環境設 Off)
display_errors = Off
log_errors = On
error_log = /var/log/php8.3-fpm-error.log
; 時區
date.timezone = Asia/Taipei$ sudo systemctl restart php8.3-fpm常用操作
| 操作 | 指令 |
|---|---|
| 重新載入設定 | sudo systemctl reload php8.3-fpm |
| 完全重啟 | sudo systemctl restart php8.3-fpm |
| 查看狀態 | sudo systemctl status php8.3-fpm |
| 查看已安裝擴充 | php -m |
| 安裝擴充 | sudo apt install php8.3-intl && sudo systemctl restart php8.3-fpm |
| 查看設定值 | php -i | grep memory_limit |