Ubuntu 下将 PHP 与 Web 服务器集成
一 环境准备与版本选择
- 更新系统并安装常用工具:sudo apt update && sudo apt upgrade -y
- 选择并安装所需的 PHP 版本(示例:PHP 8.3 或 PHP 7.4)。安装常用扩展:sudo apt install php php-cli php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip
- 启动并开机自启 PHP-FPM(以实际版本为准):sudo systemctl start php8.3-fpm && sudo systemctl enable php8.3-fpm
- 建议将站点根目录的所有者设为 www-data,以便与 PHP-FPM/Apache 工作进程权限一致:sudo chown -R www-data:www-data /var/www/html
二 与 Apache 集成
- 安装 Apache:sudo apt install apache2
- 方案 A(推荐)使用 PHP-FPM 处理 PHP
- 启用模块:sudo a2enmod proxy_fcgi setenvif
- 配置 PHP-FPM 监听(/etc/php/8.3/fpm/pool.d/www.conf):listen = /run/php/php8.3-fpm.sock
- 在站点配置(如 /etc/apache2/sites-available/000-default.conf 的 内)添加:
- <FilesMatch .php$>
SetHandler “proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost”
- 重启服务:sudo systemctl restart apache2 && sudo systemctl restart php8.3-fpm
- 方案 B 使用内置模块(libapache2-mod-php)
- 安装模块:sudo apt install libapache2-mod-php8.3
- 启用重写:sudo a2enmod rewrite
- 重启服务:sudo systemctl restart apache2
- 说明:两种方案二选一;FPM 更利于并发与资源隔离,模块方式更简单
三 与 Nginx 集成
- 安装 Nginx:sudo apt install nginx
- 配置 PHP-FPM 监听(/etc/php/8.3/fpm/pool.d/www.conf):listen = /run/php/php8.3-fpm.sock
- 编辑站点配置(/etc/nginx/sites-available/default 的 server 块):
- location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
- 检查配置并重启:sudo nginx -t && sudo systemctl reload nginx
- 可选:使用 TCP 方式(适合容器/跨主机)将 fastcgi_pass 改为 127.0.0.1:9000,并相应调整 PHP-FPM 的 listen
四 测试与常见问题
- 测试集成
- 创建测试文件:echo “” | sudo tee /var/www/html/info.php
- 访问:http://服务器IP/info.php,出现 PHP 信息页即成功
- 出于安全,测试完成后删除:sudo rm /var/www/html/info.php
- 常见问题排查
- 403/404:确认 root 目录与 index.php 存在,且 允许访问(AllowOverride/Require all granted)
- 502 Bad Gateway:检查 PHP-FPM 是否在运行(systemctl status php8.3-fpm),核对 fastcgi_pass 的 socket 路径或端口 与 PHP-FPM 配置一致
- 语法错误:Nginx 执行 sudo nginx -t;Apache 执行 sudo apache2ctl configtest
- 权限问题:确保网站目录属主为 www-data,PHP-FPM 与 Web 服务运行用户一致
- 扩展缺失:安装所需扩展后,重启对应服务(Apache 或 PHP-FPM)使其生效
五 性能与安全优化
- 性能
- 启用 OPcache(编辑 /etc/php/8.3/fpm/php.ini):opcache.enable=1,必要时调大 opcache.memory_consumption、opcache.interned_strings_buffer、opcache.max_accelerated_files
- 静态资源由 Nginx 直接服务,PHP 仅处理动态请求;按需调整 FPM 的 pm.max_children、pm.start_servers 等
- 安全
- 隐藏 PHP 版本:在 php.ini 设置 expose_php = Off
- 限制上传与执行:合理设置 upload_max_filesize、post_max_size、max_execution_time、memory_limit
- 仅允许必要扩展,禁用危险函数(如 exec、shell_exec 等)视应用而定
- 启用 HTTPS(部署 TLS/SSL 证书),对外仅开放 80/443,限制管理接口与目录访问(如 location ~ /.ht { deny all; })