关于CGI和FastCGI的理解
[TOC] 关于CGI和FastCGI的理解 阅读目录 0.CGI的引入 1.关于CGI 1.1.什么是CGI? 1.2.CGI程序的工作原理 1.3.CGI程序的特点 1.4.CGI程序的应用领域 2.关于FastCGI 2.1.什么是FastCGI? 2.2.FastCGI程序的工作原理 2.3.FastCGI对进程的管理方式 2.4.FastCGI的特点: 2.5.FastCGI程序的应用领域 2.6.关于CGI和FastCGI的总结 3.关于PHP-CGI,PHP-FPM和Spawn-FCGI 3.1.PHP-CGI是什么? 3.2.关于php-fpm 3.3.关于Spawn-FCGI 3.4.PHP-FPM与spawn-CGI对比 4.PHP运行的5种模式 4.1.cli模式 4.2.CGI模式 4.3.FastCGI模式 4.4.ISAPI运行模式 4.5.apache模块运行模式 4.6.总结一下 5.参考文章: 转载:关于CGI和FastCGI的理解 在搭建 LAMP/LNMP 服务器时,会经常遇到 PHP-FPM、FastCGI和CGI 这几个概念。如果对它们一知半解,很难搭建出高性能的服务器。 0.CGI的引入 在网站的整体架构中,Web Server(如nginx,apache)只是内容的分发者,对客户端的请求进行应答。 如果客户端请求的是index.html这类静态页面,那么Web Server就去文件系统中找对应的文件,找到返回给客户端(一般是浏览器),在这里Web Server分发的就是是静态数据。 整个过程如下图: 对于像index.php这类的动态页面请求,Web Server根据配置文件知道这个不是静态文件,则会调用PHP 解析器进行处理然后将返回的数据转发给客户端(浏览器)。 整个过程如下图: 在这个过程中,Web Server并不能直接处理静态或者动态请求,对于静态请求是直接查找然后返回数据或者报错信息,对于动态数据也是交付给其他的工具(这里的PHP解析器)进行处理。 那么Web Server和处理工具(这里的php-fpm)是怎样进行交互的呢?传输的是那些数据呢?这些数据的格式又是怎样的呢? 由此便引出了今天的主角:CGI 1.关于CGI 1.1.什么是CGI? 1)CGI(Common Gateway Interface)全称是“通用网关接口”,是一种让客户端(web浏览器)与Web服务器(nginx等)程序进行通信(数据传输)的协议。 用来规范web服务器传输到php解释器中的数据类型以及数据格式,包括URL、查询字符串、POST数据、HTTP header等,也就是为了保证web server传递过来的数据是标准格式的。 2)CGI可以用任何一种具有标准输入、输出和环境变量的语言编写,如php、perl、tcl等。 不同类型语言写的程序只要符合cgi标准,就能作为一个cgi程序与web服务器交互,早期的cgi大多都是c或c++编写的。 3)一般说的CGI指的是用各种语言编写的能实现该功能的程序。 1.2.CGI程序的工作原理 1)每次当web server收到index.php这种类型的动态请求后,会启动对应的CGI程序(PHP的解析器); 2)PHP解析器会解析php.ini配置文件,初始化运行环境,然后处理请求,处理完成后将数据按照CGI规定的格式返回给web server然后退出进程; 3)最后web server再把结果返回给浏览器。 ...