在web开发中Nginx和php-fpm(下文简称fpm)之间的协同工作是进行动态网页开发的关键。
-
首先我们先来了解一下cgi和fast-cgi。
- cgi是是web server和后台语言交互的协议,有了这个协议开发者可以使用任何后台语言处理web server的请求,动态生成内容返回。但是cgi协议有一个致命的缺陷就是每一个请求都会执行一次fork创建一个子进程,子进程通过加载配置文件、初始化执行环境然后才开始处理请求,处理完成后结束该处理进程。随着web开发的兴起,高并发越来越成为了常态,这样的处理方式以满足不了日常的高并发需求,于是fast-cgi就出现了。
- fast-cgi,顾名思义是一个更快地cgi协议,与cgi不同的是允许一个进程处理多个请求,而不是处理完一个请求就结束。fast-cgi协议采用的是一个master进程管理多个worker进程的模式处理请求的。当一个请求来临时首先master进程会加载配置文件(php.ini)、初始化执行环境并解析请求,然后选用一个worker进程进行实际的处理,worker进程处理完返回之后继续等待master分配。
-
Nginx(web sever)担任的是一个内容分发者的角色,如果客户端(浏览器)请求的是index.html文件,即静态文件,Nginx会去文件系统中找到该文件发送给浏览器。当请求的是index.php文件,即动态文件的时候,Nginx通过配置将该文件交给php解析器处理(Nginx不会对任何文件做处理),Nginx就通过fast-cgi协议将请求发送给php解析器处理。
-
fpm是一个 php进程管理器,包含 master 进程和 worke