Nginx端
Nginx是一个服务器,同时也是一个功能强大的proxy服务器,除了进行http请求的代理,还可以进行其他协议请求代理(fastCgi协议),为了能使nginx理解fastCgi协议,nginx提供了fastcgi模块来降http请求映射为对应的fastCgi请求
fastcgi_param:处理映射关系
fastcgi_pass:指定fpm进程监听的地址
FPM端
fmp是一个php进程管理器,包含master和worker进程,master进程只有一个,负责监听端口,接收来自web server的请求,而worker进程则有多个,每个进程内部都嵌入了一个php解释器,是php代码真正执行的地方
- fpm的master接收到请求
- master根据worker进程进行处理,如果没有可用进程,配合nginx返回502
- worker进程进行处理,超时返回504
- 请求结束,返回结果
最终执行过程:
- nginx通过localtion将所有的php文件(http请求),通过转发交给fpm处理
- php接收到请求后,进行处理
知识点补充:
CGI:一种协议(帮助服务器和语言通信)
FastCgi:一种比CGI更快的协议(为了解决单线程问题)
PHP_Cgi:php自带的一个进程管理器
PHP-Fpm:php-cgi的升级版(有效控制内存和进程、可以平滑重载php配置)
php-fpm请求处理图
php-cgi请求处理图