温馨提示×

php-fpm在centos上的最佳实践

小樊
42
2025-11-01 12:02:21
栏目: 编程语言

1. 安装与基础配置
在CentOS上安装PHP-FPM需通过yum包管理器完成,优先添加EPEL仓库以确保版本兼容性:

sudo yum install epel-release -y
sudo yum install php-fpm -y

安装完成后,启动服务并设置开机自启:

sudo systemctl start php-fpm
sudo systemctl enable php-fpm

默认配置文件路径为/etc/php-fpm.conf(全局配置)和/etc/php-fpm.d/www.conf(池配置),修改前建议备份原文件。

2. 进程管理优化(核心参数调整)
PHP-FPM的进程管理模式推荐使用dynamic(动态调整),可根据负载自动伸缩进程数量,避免内存浪费或不足。关键参数设置如下:

  • pm.max_children:最大子进程数,需根据服务器内存计算(公式:(可用内存 - 1G) / 单个PHP进程内存,单个进程内存可通过ps aux | grep php-fpm | awk '{print $6}'估算,单位MB);
  • pm.start_servers:启动时的子进程数,建议设为pm.max_children / 4 + 1(如pm.max_children=50则设为13);
  • pm.min_spare_servers/pm.max_spare_servers:最小/最大空闲进程数,建议设为CPU核心数的1-2倍(如4核CPU设为4-8);
  • pm.max_requests:每个子进程处理的最大请求数(如500),超过后自动重启,防止内存泄漏。

3. OPcache加速(必选优化)
OPcache可缓存编译后的PHP脚本,减少重复解析时间,显著提升性能。安装并启用步骤如下:

sudo yum install php-opcache -y

编辑/etc/php.ini,添加或修改以下配置:

[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=128  # 缓存内存大小(MB,根据服务器内存调整)
opcache.interned_strings_buffer=8  # 内部字符串缓存大小
opcache.max_accelerated_files=4000  # 最大加速文件数(需大于项目文件总数)
opcache.revalidate_freq=60  # 文件修改检查频率(秒,生产环境建议设为60以上)
opcache.fast_shutdown=1  # 快速关闭,提升重启速度

重启PHP-FPM使配置生效:sudo systemctl restart php-fpm

4. Web服务器集成(Nginx/Apache配置)

Nginx集成

编辑站点配置文件(如/etc/nginx/conf.d/example.conf),添加PHP处理块:

server {
    listen 80;
    server_name example.com;
    root /var/www/html;
    index index.php index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php-fpm/www.sock;  # 确保路径与www.conf中的listen一致
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

Apache集成

启用mod_proxy_fcgi模块,编辑虚拟主机配置(如/etc/httpd/conf.d/example.conf):

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/html

    <FilesMatch \.php$>
        SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
    </FilesMatch>
</VirtualHost>

修改后重启Web服务器:sudo systemctl restart nginx(或httpd)。

5. 日志与监控
启用PHP-FPM慢日志,记录执行时间超过阈值的请求,帮助定位性能瓶颈:
/etc/php-fpm.d/www.conf中添加:

request_slowlog_timeout = 5s  # 慢请求阈值(秒)
slowlog = /var/log/php-fpm/www-slow.log  # 慢日志路径

开启错误日志,便于排查问题:

php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on

使用监控工具(如tophtopvmstat)定期检查PHP-FPM进程数、内存使用率;或通过php-fpm status命令(需开启pm.status_path)查看实时状态。

6. 安全加固
禁用危险PHP函数,防止恶意利用:
/etc/php.ini中添加:

disable_functions = exec,passthru,shell_exec,system,chroot,escapeshellcmd,escapeshellarg

注意:若项目需要系统命令(如某些CMS的状态检测),需保留对应函数。
设置合理的文件权限,避免敏感信息泄露:

sudo chown -R nginx:nginx /var/www/html  # 假设Web用户为nginx
sudo chmod -R 755 /var/www/html

定期更新系统和软件包,修复安全漏洞:

sudo yum update -y
```。


**7. 缓存与扩展优化**  
使用Redis或Memcached缓存数据库查询结果,减少数据库负载(需安装对应扩展,如`php-pecl-redis`)。  
调整PHP会话存储方式,将会话保存到内存或Redis中(修改`/etc/php.ini`):  
```ini
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"

优化数据库查询,使用索引、避免SELECT *、合理设计表结构,降低数据库压力。

0