FPM是什么
FPM 是一个 PHP 进程管理器,包含 master 进程和 worker 进程两种进程:master 进程只有一个,负责监听端口,接收来自 Web Server 的请求,而 worker 进程则一般有多个 (具体数量根据实际需要配置),每个进程内部都嵌入了一个 PHP 解释器,是 PHP 代码真正执行的地方,下图是我本机上 fpm 的进程情况,1一个 master 进程,6个 worker 进程:
从 FPM 接收到请求,到处理完毕,其具体的流程如下:
1. FPM 的 master 进程接收到请求
2. master 进程根据配置指派特定的 worker 进程进行请求处理,如果没有可用进程,返回错误,这也是我们配合 Nginx遇到502错误比较多的原因。
3. worker 进程处理请求,如果超时,返回504错误
4. 请求处理结束,返回结果
NGINX发送请求到FPM
Nginx 不仅仅是一个 Web 服务器,也是一个功能强大的 Proxy 服务器,除了进行 http 请求的代理,也可以进行许多其他协议请求的代理,包括本文与 fpm 相关的 fastcgi 协议。为了能够使 Nginx 理解 fastcgi 协议,Nginx 提供了 fastcgi 模块来将 http 请求映射为对应的 fastcgi 请求。
fastcgi.conf 其主要完成的工作是将 Nginx 中的变量翻译成 PHP 中能够理解的变量。
nginx配置虚拟主机,然后我们通过 location 指令,将所有的以 .php 结尾的请求都交给 fastcgi 模块处理,从而把所有的 php 请求都交给了 fpm 处理,从而完成 Nginx 到 fpm 的闭环。
nginx配置文件