潍坊达内负责整理:CGI 模式运行原理:当 Nginx 收到浏览器 /index.php 这个请求后,首先会创建一个对应实现了 CGI 协议的进程,这里就是 php-cgi(PHP 解析器).接下来 php-cgi 会解析 php.ini 文件,初始化执行环境,然后处理请求,再以 CGI 规定的格式返回处理后的结果,退出进程.最后,Nginx 再把结果返回给浏览器.整个流程就是一个 Fork-And-Execute 模式.当用户请求数量非常多时,会大量挤占系统的资源如内存、CPU 时间等,造成效能低下.所以在用 CGI 方式的服务器下,有多少个连接请求就会有多少个 CGI 子进程,子进程反复加载是 CGI 性能低下的主要原因.
CGI 模式的好处就是完全独立于任何服务器,仅仅是做为一个中介:提供接口给 WEB 服务器和脚本语言或者是完全独立编程语言.它们通过 CGI 协议搭线来完成数据传递.这样做的好处了尽量减少它们之间的关联,使得各自更加独立、互不影响.
CGI 模式已经是比较古老的模式了,这几年都很少用了.
FastCGI 模式
FastCGI(Fast Common Gateway Interface,快速通用网关接口)是一种让交互程序与 Web 服务器通信的协议.FastCGI 是早期通用网关接口(CGI)的增强版本.FastCGI 致力于减少网页服务器与 CGI 程序之间交互的开销,从而使服务器可以同时处理更多的网页请求.

根据定义可以知道,FastCGI 也是一种协议,实现了 FastCGI 协议的程序,更像是一个常驻型(long-live)的 CGI 协议程序,只要激活后,它可以一直执行着,不会每次都要花费时间去 fork 一次.
FastCGI 模式运行原理:FastCGI 进程管理器启动之后,首先会解析 php.ini 文件,初始化执行环境,然后会启动多个 CGI 协议解释器守护进程 (进程管理中可以看到多个 php-cig 或 php-cgi.exe),并等待来自 WEB 服务器的连接;当客户端请求到达 WEB 服务器时,FastCGI 进程管理器会选择并连接到一个 CGI 解释器, WEB 服务器将 CGI环境变量和标准输入发送到 FastCGI 的子进程 php-cgi 中; php-cgi 子进程完成处理后便将标准输出和错误信息返回给 WEB 服务器;此时 php-cgi 子进程就会关闭连接,该请求便处理结束,接着继续等待并处理来自 FastCGI 进程管理器的下一个请求连接.
FastCGI 模式采用了 C/S 结构,可以将 WEB 服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程.当 WEB 服务器每次遇到动态程序时,可以将其直接交付给 FastCGI 进程来执行,然后将得到的结果返回给浏览器.这种方式可以让 WEB 服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能.
以上就是潍坊达内给大家做的内容详解,更多关于IT的学习,请继续关注潍坊达内