Nginx和php,FastCGI和php-fpm

11月2日 Nginx和php之间是怎样进行交流的?


FastCGI

https://en.wikipedia.org/wiki/FastCGI

CGI是为外部应用和Web服务器提供接口的协议. CGI应用在不同进程中运行,它们在请求时创建,请求结束时关闭。这种一个请求对应一个进程的模型让CGI应用易于实现,但也降低了他的效率和可伸缩性。

FastCGI用持续进程来处理多个请求。每次fork CGI会解析php.ini文件,初始化,因此多个请求就要fork多次;而FastCGI解析php.ini初始化后,会生成多个worker,请求到来时,master会传递给worker处理,然后又可以继续接受下一个请求。


php-fpm

http://php.net/manual/zh/install.fpm.php

FPM(FastCGI 进程管理器)用于替换 PHP FastCGI 的大部分附加功能,对于高负载网站是非常有用的。

它的功能包括:
支持平滑停止/启动的高级进程管理功能;
可以工作于不同的 uid/gid/chroot 环境下,并监听不同的端口和使用不同的 php.ini 配置文件(可取代 safe_mode 的设置);
stdout 和 stderr 日志记录;
在发生意外情况的时候能够重新启动并缓存被破坏的 opcode;
文件上传优化支持;
"慢日志" - 记录脚本(不仅记录文件名,还记录 PHP backtrace 信息,可以使用 ptrace或者类似工具读取和分析远程进程的运行数据)运行所导致的异常缓慢;
fastcgi_finish_request() - 特殊功能:用于在请求完成和刷新数据后,继续在后台执行耗时的工作(录入视频转换、统计处理等);
动态/静态子进程产生;
基本 SAPI 运行状态信息(类似Apache的 mod_status);
基于 php.ini 的配置文件。


php-fpm和Nginx

也就是说php-fpm是一个FastCGI进程管理器,Nginx收到请求后,通过端口(Nginx配置写明:#pass the PHP script to FastCGI server listening on 127.0.0.1:9000,也就是通过本机9000端口传给FastCGI服务器,在此处就是传给php-fpm进行处理)传递给FastCGI,交由CGI-App处理(此处即为由php解析)后返回。


参考:

https://segmentfault.com/q/1010000000256516

http://www.imooc.com/article/19278?block_id=tuijian_wz

猜你喜欢

转载自blog.csdn.net/bduck2014/article/details/78473124