前言:php
Linux下搭建nginx+php+memached(LPMN)的时候,nginx.conf中配须要配置fastCGI,php须要安装 php-fpm扩展并启动php-fpm守护进程,nginx才能够解析php脚本。那么,这样配置的背后原理是什么?nginx、fastCGI、 php-fpm之间又有什么关系呢?博主一直有这样的疑惑,因为没法理清nginx、php-fpm之间的关系,遇到nginx解析不了php脚本的时 候,每每不知所措,花费的问题排查时间也很是长。所以,特意抽时间了解这背后的原理,梳理了一下nginx、fastCGI、php-fpm之间的关系。nginx
1、fastCGI?apache
fastCGI是由CGI(common gateway interface,通用网关接口)发展而来,是http服务器(nginx、apache)和动态脚本语言(php)之间的通讯接口。记住,fastCGI只是一个接口。服务器
fastCGI的优势:fastCGI采用C/S结构,能够将http服务器和动态脚本解析服务器分离(两者能够部署在不一样的服务器上),让http服务器专注处理静态请求和转发动态请求到脚本解析服务器;脚本解析服务器则专注处理动态脚本的请求。php-fpm
2、nginx+fastCGI优化
nginx不支持对外部程序的直接调用或者解析,必须经过fastCGI进行调用。nginx收到CGI请求以后,fastCGI接口在脚本解析服务器上,启动一个或者多个守护进程对动态脚本进行解析。spa
3、php-fpmblog
fastCGI进程管理器/引擎:即对动态脚本进行实际解析的守护进程,由fastCGI启动。这里,php-fpm就是支持解析php的一个fastCGI进程管理器/引擎。接口
总结:进程
fastCGI是nginx和php之间的一个通讯接口,该接口实际处理过程经过启动php-fpm进程来解析php脚本,即php-fpm至关于一个动态应用服务器, 从而实现nginx动态解析php。所以,若是nginx服务器须要支持php解析,须要在nginx.conf中增长php的配置:将php脚本转发到 fastCGI进程监听的IP地址和端口(php-fpm.conf中指定)。同时,php安装的时候,须要开启支持fastCGI选项,而且编译安装 php-fpm补丁/扩展,同时,须要启动php-fpm进程,才能够解析nginx经过fastCGI转发过来的php脚本。
参考文章:
实战Nginx与PHP(FastCGI)的安装、配置与优化 (文章有很是详细的原理分析和配置参数说明,强烈推荐阅读)