温馨提示×

Apache2 Ubuntu版如何配置PHP

小樊
34
2025-12-24 21:53:11
栏目: 编程语言

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
    • 注意为目录设置合理的 AllowOverrideRequire 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 各一份),并重启对应服务。

0