在 TencentOS Server 3.1(基于 CentOS 8/Anolis OS 体系构建,采用 RPM 包管理)上安装和配置 PHP-FPM,主要依赖系统自带的软件源或腾讯云镜像源。以下是标准且合规的操作流程:
1. 更新系统并安装必要工具
首先确保系统基础组件是最新的,避免依赖冲突。
sudo dnf update -y
# 如果使用的是旧版兼容模式,也可使用 yum update -y
2. 安装 PHP-FPM 及相关模块
TencentOS 默认的软件源中已包含 PHP 8.x 版本(具体版本视官方源更新情况而定)。直接安装 php-fpm 及其常用扩展即可。
# 安装 PHP-FPM 核心及常用扩展(如 mysql, gd, curl 等)
sudo dnf install -y php-fpm php-mysqlnd php-gd php-curl php-mbstring php-xml php-opcache
# 确认安装成功
rpm -qa | grep php
注意:如果你需要特定版本的 PHP(例如 7.4 或 8.0),可能需要添加额外的第三方仓库(如 Remi 源),但建议优先使用系统自带源以保证内核与用户态的兼容性稳定。
3. 启动并设置开机自启
安装完成后,立即启动服务并配置开机自启。
sudo systemctl start php-fpm
sudo systemctl enable php-fpm
sudo systemctl status php-fpm
若状态显示为 active (running),则说明服务正常。
4. 配置文件位置与修改
TencentOS Server 3.1 的 PHP-FPM 主配置文件通常位于 /etc/php.ini,而 FPM 专用的进程管理、监听端口等配置位于 /etc/php-fpm.d/ 目录下。
A. 全局配置 (/etc/php.ini)
使用编辑器打开该文件调整参数,例如时区设置:
sudo vim /etc/php.ini
找到 date.timezone 行,取消注释并设置为 Asia/Shanghai:
date.timezone = Asia/Shanghai
保存退出。
B. FPM 池配置 (/etc/php-fpm.d/www.conf)
这是最常用的配置项,用于控制 Nginx/Apache 如何与 PHP 交互。
sudo vim /etc/php-fpm.d/www.conf
关键配置项检查:
- 监听方式:
- 如果使用 Nginx,通常保持默认的 Unix Socket 模式(推荐,性能更好):
listen = /run/php-fpm/www.sock - 如果需要 TCP 连接(较少见):
listen = 127.0.0.1:9000
- 如果使用 Nginx,通常保持默认的 Unix Socket 模式(推荐,性能更好):
- 权限设置:
确保 socket 文件或端口对 Web 服务器用户(通常是nginx或www-data)可访问。如果是 Socket 模式,需检查listen.owner和listen.group是否与 Web 服务器用户一致。listen.owner = nginx listen.group = nginx listen.mode = 0660(注:如果你的 Web 服务器用户是
apache,请相应修改) - 进程管理:
根据服务器内存调整pm.max_children。对于轻量级应用,默认值通常足够;高并发场景需调大。pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35
5. 验证与测试
重启 PHP-FPM 使配置生效:
sudo systemctl restart php-fpm
创建一个简单的测试文件来验证环境:
cat <<EOF | sudo tee /usr/share/nginx/html/info.php > /dev/null
<?php
phpinfo();
?>
EOF
(注:Web 根目录路径视你安装的 Web 服务器而定,Nginx 通常为 /usr/share/nginx/html)
此时,通过浏览器访问 http://<你的服务器IP>/info.php,若能显示 PHP 信息页面,说明安装配置成功。
6. 防火墙与安全组配置
在腾讯云服务器控制台(CVM)的安全组中,确保放行 80 (HTTP) 或 443 (HTTPS) 端口。PHP-FPM 本身通常不直接对外暴露端口(除非使用了 TCP 监听且未做反向X_X),因此无需在安全组开放 9000 端口,以符合最小化安全原则。
常见问题排查
- 权限错误:如果 Nginx 无法读取 PHP-FPM 生成的 socket,检查
ls -l /run/php-fpm/www.sock的属主属组,确保与 Nginx 运行用户一致。 - 超时问题:在高负载下出现 "502 Bad Gateway",通常是因为 PHP 执行时间过长导致 FPM 进程被杀,需调整
request_terminate_timeout或增加pm.max_children。 - SELinux:虽然 TencentOS 默认可能关闭了 SELinux 或处于宽容模式,如果遇到阻碍,可使用
setsebool -P httpd_can_network_connect 1等命令调整上下文(视具体报错而定)。
以上步骤适用于标准的 TencentOS Server 3.1 生产环境部署。如有特殊业务需求(如多版本共存),建议考虑使用容器化方案(Docker)进行隔离。
CLOUD云枢