位置:首页 > PHP > Linux 中如何配置 PHP-FPM:从安装到联通验证

Linux 中如何配置 PHP-FPM:从安装到联通验证

时间:2026-08-25  |  作者:骑光打字机  |  阅读:0

目录

  1. 安装 PHP-FPM
  2. 修改 PHP-FPM 配置文件
  3. 启动服务并设置开机自启
  4. 让 Nginx 或 Apache 把 PHP 请求转给 PHP-FPM
  5. 重启服务并验证是否生效
  6. 部署时还要注意的两件事

前言

PHP-FPM 是 Linux 上部署 PHP 时几乎绕不开的一环,但很多配置问题都出在“服务装好了,却没有真正连通”。这篇文章按安装、进程池调整、Nginx/Apache 对接到最终验证的顺序重写一遍,重点把监听方式、权限设置和转发关系讲清楚,方便你部署时少走弯路,也能在出错时更快定位问题。

PHP-FPM 是 Linux 上部署 PHP 的常见方式,但真正容易出错的环节,往往不是安装命令本身,而是监听地址、运行用户和 Web 服务器转发配置没有统一。下面按实际部署顺序梳理一遍,从安装、进程池参数到 Nginx 或 Apache 对接,再到最后验证,方便你快速搭起可用环境,也能在访问失败时知道该优先检查哪里。

安装 PHP-FPM

先确认系统里已经准备好 PHP 运行环境,再安装 PHP-FPM 服务。不同发行版使用的包管理器不同,命令也略有区别。

Debian/Ubuntu 安装方式

sudo apt-get update
sudo apt-get install php-fpm

如果你使用的是 Debian 系发行版,例如 Ubuntu,直接执行上面两条命令即可完成安装。

CentOS/Red Hat 安装方式

sudo yum install epel-release
sudo yum install php-fpm

在 Red Hat 系环境中,通常先安装 EPEL 源,再安装 php-fpm

安装完成后,可以用下面的命令确认 PHP 版本是否正常:

php -v

这一步的意义不只是看版本号,也是在确认 PHP 本体已经可用,后续配置才有基础。

修改 PHP-FPM 配置文件

PHP-FPM 的配置目录通常位于 /etc/php/{version}/fpm/,其中 {version} 需要替换成实际 PHP 版本。主配置文件是 php-fpm.conf,但日常部署时最常调整的通常是进程池配置文件 pool.d/www.conf

PHP-FPM 进程池配置关键项关系图
PHP-FPM 进程池配置关键项把 listen、运行用户和 pm 参数放在同一张图里,便于理解哪些设置会直接影响连接与并发。

打开这个文件:

/etc/php/{version}/fpm/pool.d/www.conf

常见配置大致如下:

; 监听地址和端口
listen = 127.0.0.1:9000
; 用户和组
user = www-data
group = www-data
; 进程管理
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

先看 listen:决定 Web 服务器往哪里转发

listen 用来指定 PHP-FPM 接收请求的方式。示例里使用的是 127.0.0.1:9000,也就是本地 TCP 端口。另一种常见写法是 Unix 套接字,例如:

/var/run/php/php7.4-fpm.sock

如果你的 Web 服务器和 PHP-FPM 在同一台机器上,Unix 套接字通常更常见,开销也更低。无论你选哪种方式,后面的 Nginx 或 Apache 配置都必须与这里保持一致。

再看 user 和 group:避免权限问题

usergroup 需要与 Web 服务器运行账户匹配。比如在 Debian/Ubuntu 上,Nginx 或 Apache 常见账户是 www-data。如果这里设置不一致,最常见的结果就是 PHP 文件能被转发,但脚本访问目录、缓存或上传路径时发生权限错误。

进程池参数怎么理解

pm = dynamic 是多数场景下比较稳妥的选择,它会根据负载动态调整子进程数量。下面几个参数分别控制并发上限与空闲进程数量:

  • pm.max_children:允许存在的最大子进程数
  • pm.start_servers:服务启动时创建的子进程数
  • pm.min_spare_servers:最少保留的空闲进程数
  • pm.max_spare_servers:最多保留的空闲进程数

如果服务器资源有限,这些值不宜设得过高;如果访问量较大,又要避免设置过低导致请求排队。原文里的参数是一组可直接起步的基础值,后续可以再按实际负载调整。

启动服务并设置开机自启

配置完成后,需要先把 PHP-FPM 服务启动起来,并加入开机自启。

sudo systemctl start php{version}-fpm
sudo systemctl enable php{version}-fpm

这里的 {version} 同样替换为你的实际 PHP 版本,例如 php7.4-fpm。执行后,当前会话中服务会立即运行,服务器重启后也会自动拉起。

让 Nginx 或 Apache 把 PHP 请求转给 PHP-FPM

PHP-FPM 启动后还不够,Web 服务器必须知道遇到 .php 文件时该交给谁处理。这一步本质上是在建立“请求转发关系”。

Nginx 与 Apache 对接 PHP-FPM 的转发关系对比图
Web 服务器与 PHP-FPM 对接关系对比展示 Nginx 和 Apache 如何把 .php 请求交给 PHP-FPM。

Nginx 配置示例

在 Nginx 的 server 块中加入处理 PHP 的 location

location ~ .php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php{version}-fpm.sock; # 用Unix套接字
    # fastcgi_pass 127.0.0.1:9000; # 或TCP/IP
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

这里最关键的是 fastcgi_pass。如果 PHP-FPM 的 listen 配置成 Unix 套接字,这里就必须写对应的套接字路径;如果是 127.0.0.1:9000 这种 TCP 方式,这里就要改成同样的地址和端口。两边只要不一致,请求就无法正确转发。

Apache 配置示例

如果使用 Apache,需要先启用 proxy_fcgisetenvif 模块,然后在 VirtualHost 中加入:


    SetHandler "proxy:fcgi://localhost:9000"

这里的 localhost:9000 也要与 PHP-FPM 的监听配置一致。如果你不是监听 9000 端口,而是改成了其他地址或 Unix 套接字,就需要同步修改 Apache 的转发方式。

重启服务并验证是否生效

Web 服务器配置改完后,需要重启对应服务,让新配置正式生效。

PHP-FPM 部署后的验证与排错检查清单图
部署完成后的验证路径把重启服务、创建测试文件和常见故障检查项合并成一张验证路径图,方便部署后快速确认。

重启 Nginx 或 Apache

Nginx:

sudo systemctl restart nginx

Apache:

sudo systemctl restart apache2

创建测试文件检查链路是否打通

在站点文档根目录下新建一个 info.php 文件,内容如下:

然后在浏览器访问:

http://你的服务器地址/info.php

如果页面能够正常显示 PHP 信息,说明 Web 服务器已经成功把请求交给 PHP-FPM 处理,整条链路是通的。

访问失败时优先检查什么

如果没有看到 PHP 信息页,通常优先排查这几项:

  • PHP-FPM 是否已经成功启动
  • listenfastcgi_passSetHandler 是否完全一致
  • 套接字路径是否写对
  • Web 服务器运行用户与 PHP-FPM 的 usergroup 是否匹配

这类问题大多不是 PHP 本身损坏,而是服务之间的连接关系没有对上。

部署时还要注意的两件事

第一,修改配置文件前最好先备份原文件,这样一旦改错可以快速回退。第二,不同 Linux 发行版、不同 PHP 版本在目录结构和服务名称上可能略有差异,但安装、配置进程池、让 Web 服务器转发、最后验证这条主线基本不变。

如果你按这条顺序操作,PHP-FPM 在 Linux 上的部署通常不会太复杂。真正要抓住的重点只有一个:PHP-FPM 的监听方式,必须和 Web 服务器的转发配置严格对应。

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

精选合集

更多

大家都在玩