PHP-FPM与Nginx解析PHP代码的机制及请求数据流问询
Nginx 配合 PHP-FPM 解析 PHP 代码的完整逻辑
一、PHP-FPM 的进程管理逻辑
PHP-FPM 是专门管理 PHP 解析进程的管理器,它不会每次接收到请求才临时生成新进程,而是预先维护一组worker进程,核心有三种进程管理模式:
- 静态模式:启动时就生成固定数量的 worker 进程,全程存活直到 PHP-FPM 重启。请求到来时直接分配空闲 worker 处理,无空闲进程则等待排队。
- 动态模式:启动时生成指定起始数量的 worker 进程,请求量上升时会新建进程(不超过设定的最大数量),空闲超时的进程会被销毁,最终维持在起始数量。这是生产环境最常用的模式。
- 按需模式:初始不生成 worker 进程,只有请求到来时才新建,空闲超时后自动销毁,适合低流量场景。
二、从请求到响应的完整数据流
当用户请求一个 PHP 文件(如index.php)时,全流程如下:
- 请求抵达 Nginx:Nginx 作为前端服务器,先根据配置里的
location规则判断这是 PHP 请求(比如匹配.php后缀)。 - Nginx 转发请求到 PHP-FPM:通过
fastcgi_pass指令,Nginx 将请求的关键信息(请求方法、请求头、目标文件路径等)打包成 FastCGI 协议格式,发送到 PHP-FPM 监听的地址(可以是 Unix 套接字或 TCP 端口,比如127.0.0.1:9000)。 - PHP-FPM 分配 worker 处理请求:PHP-FPM 的
master进程负责监听上述地址,收到请求后,将其转交给空闲的 worker 进程;若没有空闲进程,则按对应模式规则处理——要么排队,要么新建进程(动态/按需模式下)。 - worker 进程执行 PHP 代码:worker 进程读取指定的 PHP 文件,编译并执行代码,生成 HTML 或其他响应内容。
- 执行结果回传给 Nginx:worker 进程将结果用 FastCGI 协议打包,返回给 Nginx。
- Nginx 返回响应给用户:Nginx 收到结果后,将其封装成标准 HTTP 响应,发送给发起请求的客户端。
补充:为什么需要 PHP-FPM?
Nginx 本身是高性能 HTTP 服务器,但没有内置 PHP 解析能力,需要借助专门的 PHP 解析器处理动态代码。这种分工让 Nginx 专注于静态资源分发和请求转发,PHP-FPM 专注于代码执行,能最大化整体性能。
内容的提问来源于stack exchange,提问作者gikores
相关产品推荐
相关产品推荐

