一、安装与基础配置
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),避免误操作导致服务中断。