一、安裝與基礎配置
sudo yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
;添加Nginx官方倉庫(如適用)以獲取穩定版本,提升安全性與兼容性。sudo yum install -y nginx php-fpm
安裝Nginx與PHP-FPM(避免手動編譯的繁瑣與潛在錯誤);同時安裝常用PHP擴展(如php-mysqlnd
、php-gd
、php-mbstring
),滿足應用基礎需求。/etc/php-fpm.d/www.conf
),設置user = nginx
、group = nginx
(或對應Web服務器用戶),確保進程以非root權限運行,降低安全風險。二、PHP-FPM進程管理優化
dynamic
(動態)模式,根據服務器資源動態調整進程數量:
pm.max_children
:設置為服務器內存÷單個PHP進程內存(如1GB內存、每個進程100MB,則設為10-15),避免內存溢出;pm.start_servers
:設為pm.max_children/4 + 1
(如max_children=50,則設為13),保證啟動時有足夠進程應對初始請求;pm.min_spare_servers
/pm.max_spare_servers
:設為CPU核心數的1-2倍(如4核CPU設為4-8),維持空閑進程池,平衡響應速度與資源占用;pm.max_requests
:設為500-1000,強制進程在處理指定請求數后重啟,防止內存泄漏累積。rlimit_files = 10240
(默認1024可能不足),提升文件描述符上限,避免高并發下出現“Too many open files”錯誤。三、PHP與擴展性能優化
php-opcache
擴展(sudo yum install php-opcache
),并在php.ini
中配置:[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128 # 根據內存調整(如256MB內存可設為192)
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000 # 根據項目文件數調整
opcache.revalidate_freq=60 # 生產環境設為60(秒),平衡性能與代碼更新
opcache.fast_shutdown=1
OPcache可緩存編譯后的PHP腳本,減少重復解析時間,提升執行效率。php.ini
優化核心參數:
memory_limit
:設為128M-256M(根據應用需求,避免過大導致內存浪費);max_execution_time
:設為30-300秒(根據腳本復雜度,如上傳或數據處理腳本可適當延長);upload_max_filesize
/post_max_size
:設為10M-100M(根據文件上傳需求,如需更大文件則調整);disable_functions
:禁用高危函數(如exec
、system
、shell_exec
),僅保留必要函數(如應用需調用系統命令則例外)。四、Web服務器集成配置
/etc/nginx/conf.d/default.conf
)中添加PHP處理塊:location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php-fpm/www.sock; # 確保路徑與PHP-FPM配置一致
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
使用Unix Socket替代TCP端口(默認127.0.0.1:9000),減少網絡開銷,提升通信效率。location ~* \.(jpg|jpeg|png|gif|css|js|ico)$ {
expires 30d;
access_log off;
add_header Cache-Control "public";
}
降低PHP-FPM負載,提升靜態資源訪問速度。五、監控與維護
top
、htop
查看CPU、內存占用;php-fpm -t
測試配置語法;tail -f /var/log/php-fpm/error.log
監控錯誤日志;啟用慢日志記錄(request_slowlog_timeout = 5s
,slowlog = /var/log/php-fpm/www-slow.log
),定位執行緩慢的腳本。sudo systemctl restart php-fpm
);/etc/php-fpm.d/www.conf
、php.ini
),避免誤操作導致服務中斷。