php-fpm 与 Apache 以及 Nginx 的关系
php 与 web 服务器的关系
php 属于后端语言的一种,它可以为 web 服务器提供服务。但 php 本身属于一种动态语言,不能像普通的 html 之类的静态文件被 web 服务器直接识别并返回给客户端,它需要额外的解释说明和转换。
像螺丝和螺母上的螺纹工作原理一样,php 和 web 服务器在对外提供服务时也需要提供接口。php 提供对的接口服务叫做 SAPI,而 web 服务器提供的接口服务有两种,一种是 CGI,这种已经基本淘汰,后来的优化版叫 FastCGI;另外一种是 Apache 特有的服务模块 php5_module(或者 php7_module),这种服务模式也叫 mod_php。而 PHP-FPM (PHP FastCGI Process Manager) 全称叫 PHP FastCGI 进程管理器,是专门来辅助 mod_fastcgi 模式的。
所以一般的 web 服务请求过程如下(php):
request -> Apache -> mod_php -> SAPI -> PHP
request -> Apache / Nginx / IIS -> FastCGI(PHP-FPM) -> SAPI -> PHP
光看这流程,感觉 FastCGI 模式加了 PHP-FPM 让请求处理更慢了,其实主要是优化了服务器处理请求的过程,把处理脚本的工作交给后面的 PHP-FPM 子进程去做,有点分布式的感觉。这样前面的服务器能够同步处理的请求就可以更多一些。
以下是一些配置使用 php-fpm 的教程:
php连接apache ,使用php-fpm方式 - cnblogs
apache 安装配置 以及php-fpm结合apache配置 - Mzc's blog - cnblogs