在Linux系统中,PHP-FPM(FastCGI Process Manager)与Apache的切换主要涉及处理PHP请求的方式变更:从Apache内置的mod_php模块切换到PHP-FPM(推荐,提升性能与安全性),或从PHP-FPM切回mod_php。以下是详细操作流程:
确保系统已安装以下组件:
sudo apt install apache2,CentOS使用sudo yum install httpd);sudo apt install php-fpm,CentOS使用sudo yum install php-fpm);php-cli、php-mysql等(根据需求安装)。mod_php是Apache内置的PHP处理模块,切换到PHP-FPM需禁用mod_php并配置Apache通过FastCGI与PHP-FPM通信。
mod_php会随Apache启动加载,需先禁用:
sudo a2dismod php7.x # 将7.x替换为你的PHP版本(如php7.4、php8.1)
PHP-FPM通过FastCGI协议通信,需启用proxy_fcgi和setenvif模块:
sudo a2enmod proxy_fcgi setenvif
修改Apache的虚拟主机配置文件(通常位于/etc/apache2/sites-available/000-default.conf或/etc/httpd/conf.d/your_site.conf),添加以下内容以将PHP请求转发给PHP-FPM:
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php7.x-fpm.sock|fcgi://localhost"
</FilesMatch>
127.0.0.1:9000,需修改PHP-FPM配置):<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
编辑PHP-FPM的池配置文件(通常位于/etc/php/7.x/fpm/pool.d/www.conf),确保listen指令与Apache配置一致:
listen = /run/php/php7.x-fpm.sock
listen.owner = www-data # Apache运行用户(Ubuntu默认www-data,CentOS默认apache)
listen.group = www-data
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
sudo systemctl restart apache2 # Ubuntu
# 或
sudo systemctl restart httpd # CentOS
sudo systemctl restart php7.x-fpm # 重启PHP-FPM
若需切换回mod_php(Apache内置处理PHP),需反向操作上述步骤。
<FilesMatch \.php$>块(即SetHandler指令);proxy_fcgi和setenvif模块:sudo a2dismod proxy_fcgi setenvif
sudo a2enmod php7.x # 将7.x替换为你的PHP版本
编辑PHP-FPM的池配置文件(/etc/php/7.x/fpm/pool.d/www.conf),将listen指令注释或修改为无效值(如listen = /run/php/php7.x-fpm.sock.disabled),并重启PHP-FPM:
sudo systemctl restart php7.x-fpm
sudo systemctl restart apache2 # Ubuntu
# 或
sudo systemctl restart httpd # CentOS
无论切换至哪种方式,均需通过以下步骤验证:
/var/www/html)创建测试文件info.php,内容为:<?php phpinfo(); ?>
http://your_server_ip/info.php,查看“Server API”字段:
mod_php成功。www-data/apache)对PHP-FPM的listen路径(如Socket文件或日志目录)有读写权限;sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/000-default.conf.bak);9000端口未被其他服务占用(可通过sudo netstat -tulnp | grep 9000检查)。通过以上步骤,即可在Linux环境下实现PHP-FPM与Apache的灵活切换。