实验工具条件:
- 已安装 Apache(Ubuntu 默认 MPM 为 Event;Rocky 默认 MPM 为 Prefork 或 Event,根据安装)。
- 以 root 用户身份执行命令。
- 系统:Ubuntu 24.04(使用 apt)或 Rocky Linux 9(使用 dnf)。
- 注意:mod_php 要求 Apache 使用 Prefork MPM 模型,但 Rocky Linux 9 不支持 mod_php;FPM 无此限制,且是 Rocky 的默认/唯一推荐方式。
- 潜在问题:如果 Apache 无法启动,检查 MPM 模型兼容性(使用系统特定的模块检查命令)。PHP 版本可能为 8.3 或类似,根据系统仓库更新。在 Rocky 上,安装 php 仅提供 CLI 和扩展,不加载 mod_php。
1.2 PHP 环境配置
1.2.1 模块形式 - 安装 PHP 软件
模块形式将 PHP 嵌入 Apache 进程,适合简单环境,但资源消耗较高。注意:此方式仅适用于 Ubuntu 24.04;Rocky Linux 9 不支持 mod_php(无对应包和模块)。
Ubuntu 24.04
-
检查初始状态:
apache2ctl -M | grep mpm # 预期输出:mpm_event_module (shared) 或类似 apache2ctl -M | grep php # 预期无输出(未安装 PHP) -
安装 PHP:
apt update -y && apt install php -y -
验证安装:
ls /etc/php/8.3 # 预期输出:apache2 cli mods-available apache2ctl -M | grep mpm # 预期输出:mpm_prefork_module (shared) ls /etc/apache2/mods-enabled/mpm* # 预期输出:mpm_prefork.conf mpm_prefork.load apache2ctl -M | grep php # 预期输出:php_module (shared) ls /etc/apache2/mods-enabled/php* # 预期输出:php8.3.conf php8.3.load排查提示: 如果 MPM 未切换为 Prefork,手动编辑 /etc/apache2/mods-available/mpm_prefork.load 并启用(使用 a2enmod mpm_prefork && a2dismod mpm_event)。
Rocky Linux 9
不支持 mod_php。 请直接使用 FPM 方式(见 1.7.2.3)。如果安装 php:
dnf update -y && dnf install php -y
- 验证:
httpd -M | grep php将无输出;ls /etc/httpd/conf.modules.d/*php*将显示无文件。继续到 FPM 安装。
1.2.2 模块形式 - Apache 应用 PHP
配置 Apache 处理 PHP 文件。注意:此方式仅适用于 Ubuntu 24.04;Rocky Linux 9 不支持 mod_php。
Ubuntu 24.04
-
定制默认虚拟主机:
rm -f /etc/apache2/sites-enabled/vhost.conf ln -sf /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-enabled/ -
创建测试 PHP 文件:
echo '<?php phpinfo(); ?>' > /var/www/html/index.php -
重启 Apache 并验证:
systemctl restart apache2.service- 浏览器访问
http://<服务器IP>/index.php(例如 http://10.0.0.13/index.php),预期显示 PHP 信息页面。
排查提示: 如果页面空白,检查日志:journalctl -u apache2.service -xe或/var/log/apache2/error.log。
- 浏览器访问
Rocky Linux 9
不支持 mod_php。 请直接使用 FPM 方式(见 1.7.2.4)。测试文件可创建,但需 FPM 配置后验证。
1.2.3 FPM 方式 - 部署 PHP 软件
FPM 提供独立进程管理,支持动态调整,适合高负载。这是 Rocky Linux 9 的推荐/唯一方式。
Ubuntu 24.04
-
安装 PHP-FPM:
apt install php-fpm -y -
确认配置:
ls /etc/php/8.3 # 预期输出:apache2 cli fpm mods-available cat /etc/php/8.3/fpm/pool.d/www.conf # 检查 listen = /run/php/php8.3-fpm.sock 或 127.0.0.1:9000 -
服务状态:
systemctl is-active php8.3-fpm.service # 预期输出:active ps aux | grep php-fpm # 查看 master 和 pool 进程排查提示: 如果服务未启动:
systemctl enable --now php8.3-fpm.service。
Rocky Linux 9
-
安装 PHP-FPM:
dnf install php-fpm -y -
确认配置:
ls /etc/php-fpm.d # 预期输出:www.conf 等 cat /etc/php-fpm.d/www.conf # 检查 listen = /run/php-fpm/www.sock 或 127.0.0.1:9000 -
服务状态:
systemctl is-active php-fpm.service # 预期输出:active ps aux | grep php-fpm # 查看 master 和 pool 进程排查提示: 如果服务未启动:
systemctl enable --now php-fpm.service。检查 SELinux:setsebool -P httpd_can_network_connect 1如果使用 TCP。
1.2.4 FPM 方式 - Apache 应用 PHP
使用 Proxy FCGI 代理请求到 FPM。
Ubuntu 24.04
-
准备 Apache 配置:
cd /etc/apache2/mods-enabled/ rm -rf php8.3.* ln -sfv ../mods-available/proxy_fcgi.load ./proxy_fcgi.load ln -sfv ../mods-available/proxy.conf ./proxy.conf ln -sfv ../mods-available/proxy.load ./proxy.load -
配置代理:
cat > /etc/apache2/mods-enabled/proxy.conf <<-EOF <FilesMatch ".+\.ph(ar|p|tml)$"> SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost" </FilesMatch> EOF -
重启并验证:
systemctl restart apache2.service apache2ctl -M | grep proxy # 预期输出:proxy_module (shared) proxy_fcgi_module (shared)- 浏览器访问测试页(创建如 1.7.2.2 中的 index.php)。
排查提示: 检查 Socket 权限:chown www-data:www-data /run/php/php8.3-fpm.sock。
- 浏览器访问测试页(创建如 1.7.2.2 中的 index.php)。
Rocky Linux 9
-
准备 Apache 配置:
cd /etc/httpd/conf.modules.d/ rm -f 10-php.conf # 或类似 mod_php 文件(如果存在,通常不存在) echo 'LoadModule proxy_module modules/mod_proxy.so' >> 00-proxy.conf echo 'LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so' >> 00-proxy.conf -
配置代理:
cat > /etc/httpd/conf.d/php-fpm.conf <<-EOF <FilesMatch \.php$> SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost" </FilesMatch> EOF -
重启并验证:
systemctl restart httpd.service httpd -M | grep proxy # 预期输出:proxy_module (shared) proxy_fcgi_module (shared)- 浏览器访问测试页(创建 echo '<?php phpinfo(); ?>' > /var/www/html/index.php)。
排查提示: 检查 Socket 权限:chown apache:apache /run/php-fpm/www.sock。SELinux:setsebool -P httpd_can_network_connect 1。
- 浏览器访问测试页(创建 echo '<?php phpinfo(); ?>' > /var/www/html/index.php)。
1.2.5 PHP 加速配置实践
使用 OPcache 缓存字节码,提升 PHP 性能。
Ubuntu 24.04
-
简介: OPcache 减少代码解析开销。
-
检查与配置:
ls /etc/php/8.3/fpm/conf.d/*opcache* # 预期输出:10-opcache.ini cat /etc/php/8.3/fpm/conf.d/10-opcache.ini # 检查 zend_extension=opcache.so- 编辑启用:
echo 'opcache.enable=1' >> /etc/php/8.3/fpm/conf.d/10-opcache.ini
- 编辑启用:
-
重启:
systemctl restart php8.3-fpm.service排查提示:
php -i | grep opcache检查状态。
Rocky Linux 9
-
简介: OPcache 减少代码解析开销。
-
检查与配置:
ls /etc/php.d/*opcache* # 预期输出:10-opcache.ini cat /etc/php.d/10-opcache.ini # 检查 zend_extension=opcache.so- 编辑启用:
echo 'opcache.enable=1' >> /etc/php.d/10-opcache.ini
- 编辑启用:
-
重启:
systemctl restart php-fpm.service排查提示:
php -i | grep opcache检查状态。
1.3 博客案例
1.3.1 案例解读
Ubuntu 24.04
-
WordPress 简介: 开源 CMS,用于博客/网站构建,依赖 PHP 和数据库。
-
部署流程(推荐 FPM):
apt install mariadb-server -y systemctl enable --now mariadb.service cd /var/www/html wget https://wordpress.org/latest.tar.gz tar -xzf latest.tar.gz && mv wordpress/* . && rm -rf wordpress latest.tar.gz chown -R www-data:www-data . apt install php-mysql php-gd php-curl -y- 配置数据库:
mysql -u root -p创建数据库/用户。 - 编辑 wp-config.php 设置 DB 连接。
- 重启:
systemctl restart apache2.service - 浏览器访问完成安装。
排查提示: 检查权限和日志。
- 配置数据库:
Rocky Linux 9
-
WordPress 简介: 开源 CMS,用于博客/网站构建,依赖 PHP 和数据库。
-
部署流程(推荐 FPM):
dnf install mariadb-server -y systemctl enable --now mariadb.service cd /var/www/html wget https://wordpress.org/latest.tar.gz tar -xzf latest.tar.gz && mv wordpress/* . && rm -rf wordpress latest.tar.gz chown -R apache:apache . dnf install php-mysqlnd php-gd php-curl -y- 配置数据库:
mysql -u root -p创建数据库/用户。 - 编辑 wp-config.php 设置 DB 连接。
- 重启:
systemctl restart httpd.service - 浏览器访问完成安装。
排查提示: 检查 SELinux:setsebool -P httpd_unified 1,和日志。
- 配置数据库: