Apache2 Ubuntu 版配置 PHP 实操指南
一 安装与基础验证
- 更新索引并安装组件(以 Ubuntu 20.04/22.04 为例,默认仓库通常提供 PHP 7.4/8.1;如需 PHP 8.1,可启用 ppa:ondrej/php):
- 更新与安装 Apache:sudo apt update && sudo apt install apache2
- 安装 PHP 与常用扩展(按需增减):sudo apt install php libapache2-mod-php php-cli php-fpm php-json php-common php-mysql php-zip php-gd php-mbstring php-curl php-xml php-pear php-bcmath
- 启动并设置开机自启:sudo systemctl start apache2 && sudo systemctl enable apache2
- 验证 Apache 与 PHP:
- 创建测试文件:echo “” | sudo tee /var/www/html/info.php
- 浏览器访问:http://服务器IP/info.php,看到 PHP 信息页即成功(测试后建议删除该文件)。
二 两种常用集成方式
- 方式 A 模块方式 libapache2-mod-php(简单、适合单机)
- 原理:Apache 以模块方式直接解析 .php。
- 启用模块(如尚未启用):sudo a2enmod phpX.Y(将 X.Y 替换为实际版本,如 8.1)
- 确保索引文件包含 index.php:sudo nano /etc/apache2/mods-enabled/dir.conf,DirectoryIndex 行应包含 index.php
- 重启生效:sudo systemctl restart apache2
- 适用场景:快速部署、传统应用;并发与资源隔离能力弱于 FPM。
- 方式 B PHP-FPM + mod_proxy_fcgi(推荐、适合生产)
- 安装 FPM:sudo apt install phpX.Y-fpm
- 启动 FPM:sudo systemctl start phpX.Y-fpm && sudo systemctl enable phpX.Y-fpm
- 启用代理模块:sudo a2enmod proxy_fcgi setenvif
- 在站点配置中处理 PHP(示例为默认站点):
- 编辑:sudo nano /etc/apache2/sites-available/000-default.conf
- 在 <VirtualHost *:80> 内加入:
<FilesMatch .php$>
SetHandler “proxy:unix:/run/php/phpX.Y-fpm.sock|fcgi://localhost”
- 重启服务:sudo systemctl restart apache2 && sudo systemctl restart phpX.Y-fpm
- 适用场景:多站点、高并发、与进程管理/OPcache 配合更佳。
三 常用配置与优化
- php.ini 位置与常用项(路径随版本与 SAPI 不同):
- 模块方式:/etc/php/X.Y/apache2/php.ini
- FPM 方式:/etc/php/X.Y/fpm/php.ini
- 常见调优(按需在 php.ini 中修改并重启服务):
- 开发环境:display_errors = On,error_reporting = E_ALL
- 上传限制:upload_max_filesize = 50M,post_max_size = 50M
- 性能:opcache.enable=1,opcache.memory_consumption=128
- 常用扩展(按需安装):sudo apt install php-mysql php-gd php-curl php-xml php-mbstring php-zip php-bcmath
- 多站点与目录(示例):
- 新建配置:sudo nano /etc/apache2/sites-available/example.com.conf
- 启用站点:sudo a2ensite example.com.conf && sudo systemctl reload apache2
- 注意为目录设置合理的 AllowOverride 与 Require all granted。
四 故障排查与验证
- 服务状态与端口:
- Apache:systemctl status apache2;端口:ss -tlnp | grep :80
- FPM:systemctl status phpX.Y-fpm;套接字:ls -l /run/php/phpX.Y-fpm.sock
- 语法与配置检查:
- Apache:sudo apache2ctl configtest
- 重载:sudo systemctl reload apache2
- 日志定位:
- Apache 错误日志:/var/log/apache2/error.log
- FPM 日志:/var/log/phpX.Y-fpm.log(具体以 /etc/php/X.Y/fpm/php-fpm.conf 与 www.conf 为准)
- 常见问题速查:
- 访问 .php 下载而非解析:确认已启用模块方式或已正确配置 FilesMatch + proxy_fcgi;检查是否加载了正确的 MimeType。
- 502 Bad Gateway:多为 FPM 未启动或 socket 路径不一致;核对 /run/php/phpX.Y-fpm.sock 与 Apache 配置一致。
- 扩展未生效:确认修改了对应 SAPI 的 php.ini(apache2 与 fpm 各一份),并重启对应服务。