PHP-FPM-cgi-fastcgi和服务器内置模块的关系

最早的Web服务器简单地响应浏览器发来的HTTP静态文件请求,并将存储在服务器上的静态文件(例如: jpg、htm、html)返回给浏览器。

但如果涉及到动态请求的话,就要通过CGI协议来共同约定:
—————————————————————————————————————

CGI协议(接口标准)与CGI程序:

CGI(Common Gateway Interface) 是WWW技术中最重要的技术之一,有着不可替代的重要地位。CGI是外部应用程序(CGI程序)与[WEB服务器]之间的接口标准,是在CGI程序和Web服务器之间传递信息的过程。

遵循CGI协议, 使用perl、PHP、C等,就可以用来编写CGI程序。(PHP中为php-cgi, php-cgi是 PHP的解释器,它只是个 CGI 程序,只能解析请求,返回结果,不会进程管理。)

CGI 应用程序能与浏览器进行交互,还可通过数据库API 与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据,然后发送给给客户端。

CGI的缺点--令人痛恶的 (fork-and-execute 模式):

CGI程序启动后,就会解析动态脚本,然后将结果返回给Web服务器,最后Web服务器再将结果返回给客户端,刚才fork的进程也会随之关闭。这样,每次用户请求动态脚本,Web服务器都要重新fork一个新进程,去启动CGI程序。
—————————————————————————————————————

目前主流服务器规避CGI弊端的两种方式:

1、apche/tomcat- 内置模块

(例如tomcat内置java运行模块 , apche内置php_mod(PHP代码解析器))
线程。
以php_mod为例:
apache服务器在启动的时候,就会同时启动php模块。当客户端请求php文件时,apache服务器就不用再fork出一个新进程来启动php解释器,而是直接将php文件交给运行中的php模块处理。显然,这种方式下,效率会比较高。

由于在apache服务器启动时,才会读取php的配置文件,加载php模块,在apache的运行过程中 ,不会再重新读取php的配置文件。所以,每次我们修改了php的配置文件后,必须重启apache,新的php配置文件才会生效。

2、NIGNX- 配置类似PHP-FPM(JVM)的拓展管理(负载均衡分布式配置)
php-fpm使用多进程模型,每个进程只有一个线程,每个线程只能处理一个客户端访问。

PHP-FPM:
是FastCGI进程管理器的简称。php-fpm就是php中的FastCGI进程管理器。对于php5.3之前的版本来说,php-fpm是一个第三方的补丁包,旨在将FastCGI进程管理整合进PHP包中。在php5.3之后的版本中,php-fpm不再是第三方的包,它已经被集成到php的源码中了。php-fpm提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多优点,所以php-fpm被PHP官方收购了。

而FastCGI是什么呢:
FastCGI是用来提高CGI程序性能的。类似于CGI,FastCGI也可以说是一种协议,是对CGI的一个补充。
FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。它还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。

—————————————————————————————————————
如果想知道如何NIGNX配置支持PHP-FPM拓展,参考我另一篇文章:
liunx( centos 7.0) 环境配置

你可能感兴趣的:(PHP-FPM-cgi-fastcgi和服务器内置模块的关系)