创新路
我们一直在努力

CGI、FastCGI、php-cgi、php-fpm了解

  CGI(Common Gateway Interface)公共网关接口,是外部扩展应用程序与 Web 服务器交互的一个标准接口。服务器端与客户端进行交互的常见方式多,CGI 技术就是其中之一。根据CGI标准,编写外部扩展应用程序,可以对客户端浏览器输入的数据进行处理,完成客户端与服务器的交互操作。CGI规范定义了Web服务器如何向扩展应用程序发送消息,在收到扩展应用程序的信息后又如何进行处理等内容。所以CGI也是一个协议

  当客户访问网站页面的时候,服务器会受理该请求,遇到静态的内容时,web软件会自己处理并返回给客户,当遇到动态的内容时,web软件会通过CGI这个接口,按照CGI协议,传输给能处理动态内容的程序,处理了之后再返回给客户。

  那么CGI是怎么处理这些请求的呢,当有一个需要解释的动态http请求时,web服务器会请求操作系统生成一个CGI的进程,每次生成CGI进程的时候,都会初始化进程,并且解析一次php.ini的配置文件,生成一个php的解释器,才能处理动态的http请求。处理完成后,再返回结果,随之这个CGI的进程也会被杀死,如果下次还有动态的http请求时,那么又会重新生成CGI进程等等,周而复始的运行。

  这就是CGI,那么FastCGI又是什么呢?从字面意思上看,就是CGI的Fast版本,CGI的加速版。FastCGI也是一个传输协议。与CGI不同的是,它有一个FastCGI进程管理器,当你启动web软件的时候,就会启动FastCGI的进程管理器,同时解析php配置文件,并且进程管理器会生成好几个的CGI进程在内存中等待到来的http动态请求。当请求到达的时候,进程管理器会分配一个CGI进程去处理这个请求,处理完成后返回结果,但是这个CGI进程并不会被杀死,而是继续存在于内存当中,等待下一次的http动态请求的到来。这样的好处就是节省了每次处理请求都需要重新生成一个CGI进程,大大节约了处理请求的时间,但是随之而来的是服务器内存的占用和资源的升高,但是对于网站访问速度来说又快了那么一点。

  php-cgi就是php使用CGI协议处理php语言的一个程序,那么什么是php-fpm呢,php-fpm是一个实现了FastCGI协议的应用程序,它们两个都是管理CGI进程的一种管理器。但是php-cgi需要依赖于php,而php-fpm是独立的一个应用程序,不需要依赖于php,它内置了php解释器。

  php-fpm不会像CGI一样处理了请求之后杀死进程,它是使用的FastCGI协议,处理完请求之后进程还在那里,等待处理下一个请求,这样处理请求就特别的快。它还能平滑的更改配置文件,也就是修改了配置文件之后,不用重启php-fpm,直接reload就行,还在处理的请求还是按照未更改之前的配置文件继续处理,处理完了之后的进程就会自动的更新配置文件以达到重启的效果。

  php-fpm有三种运行模式,分别为static、ondemand、dynamic

    1.static:静态模式,始终在内存中保持一个固定数量的子进程

    2.ondemand:按需分配,当收到http动态请求时,fork新的子进程

    3.dynamic:动态模式,在内存中保持一定数量的子进程,当又更多的请求时,增加新的子进程,当没有那么多请求时,又减少一些子进程

未经允许不得转载:天府数据港官方信息博客 » CGI、FastCGI、php-cgi、php-fpm了解

客官点个赞呗! (0)
分享到:

评论 抢沙发

评论前必须登录!

天府云博 - 做有态度的开发&运维&设计学习分享平台!

联系我们百度云主机