CGI(通用网关接口,Common Gateway Interface)

CGI是Web服务器与请求处理程序之间传输数据的一种标准,保证Web服务器传递过来的数据是标准格式的,其程序须运行在网络服务器上。
CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。
工作原理:
每当客户请求CGI的时候,WEB服务器就请求操作系统生成一个新的CGI解释器进程(如:PHP-CGI),当CGI满足要求后,WEB服务器就杀死这个进程。
Web服务器(如:Nginx)只是内容的分发者,如果请求/index.html,Web服务器会去文件系统中找到这个文件,发送给浏览器,这里分发的是静态数据。
如果现在请求的是/index.php,根据配置文件,Nginx知道这个不是静态文件,他会把这个请求简单处理后交给PHP解释器。
Nginx会传哪些数据给PHP解释器呢?url,查询字符串,POST数据,HTTP header等,CGI就是规定要传哪些数据、以什么样的格式传递给后方处理这个请求的协议。
当Web服务器收到/index.php这个请求后,会启动对应的CGI程序,这里就是PHP的解释器。
接下来PHP解释器会解析php.ini文件,初始化执行环境,然后处理请求,再以规定CGI规定的格式返回处理后的结果,退出进程。Web服务器再把结果返回给浏览器。

FastCGI(快速通用网关接口,Fast Common Gateway Interface)

FastCGI是Web服务器与请求处理程序之间传输数据的一种标准,是CGI的增强版本,用来减少网页服务器与CGI程序之间互动的开销,从而使服务器可以同时处理更多的网页请求。
FastCGI像是一个常驻(long-live)型的CGI,只要激活后,它可以一直执行着。
FastCGI支持分布式的运算,程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。
FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并提供良好的性能、伸缩性、 Fail-Over特性等等。
FastCGI在进程中的应用程序,不依赖于任何Web服务器的内部架构,独立于核心Web服务器运行,即使服务器技术的变化,FastCGI依然稳定不变。
工作原理:
Web服务器启动时载入FastCGI进程管理器(如:Apache Module)
FastCGI进程管理器自身初始化,启动多个CGI解释器进程(多个php-cgi)并等待来自Web服务器的连接
当客户端请求到达Web服务器时,FastCGI进程管理器选择并连接到一个CGI解释器。Web服务器将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web服务器。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web服务器中)的下一个连接。在CGI模式中,php-cgi在此便退出了。
在上述情况中,你可以想象CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展并重初始化全部数据结构。
使用FastCGI,所有这些都只在进程启动时发生一次。

PHP-CGI(PHP通用网关接口,FastCGI Process Manager)

PHP-CGI是PHP的解释器,是PHP自带的FastCGI管理器。不支持平滑重启

PHP-FPM(PHP Fastcgi进程管理器,FastCGI Process Manager)

PHP-FPM调用PHP解释器(PHP-CGI)进程来处理请求,实现了Fastcgi协议,已被PHP官方收录
PHP-FPM控制的进程cpu回收的速度比较慢,内存分配均匀,有效控制内存和进程
PHP-FPM的配置在php-fpm.ini文件里,可以通过php/sbin/php-fpm进行启动、关闭,支持平滑重启,在./configure的时候带–enable-fpm参数即可开启PHP-FPM

参考资料:
http://www.nowamagic.net/librarys/veda/detail/1319
https://segmentfault.com/q/1010000000256516

CGI概念的更多相关文章

  1. 【Web学习笔记】浅析CGI概念及用法

    1. CGI是什么         CGI是Common Gateway Interface的简写,它提供了一种标准方法使得位于WebServer后端的web应用可以根据client的请求动态生成网页 ...

  2. CGI和ISAPI

    1) CGI概念CGI即通用网关接口(Common Gateway Interface),它是一段程序,运行在服务器上,提供同客户端HTML页面的交互,通俗的讲CGI就象是一座桥,把网页和WEB服务器 ...

  3. CGI/FASTCGI/ISAPI区别

    一 CGI原理及其性能 1) CGI概念CGI即通用网关接口(Common Gateway Interface),它是一段程序,运行在服务器上,提供同客户端HTML页面的交互,通俗的讲CGI就象是一座 ...

  4. 简单说明CGI是什么

    html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...

  5. 简单说明CGI和动态请求是什么

    1. CGI是什么 CGI是common gateway interface的缩写,大家都译作通用网关接口,但很不幸,我们无法见名知意. 我们知道,web服务器所处理的内容都是静态的,要想处理动态内容 ...

  6. CGI与ISAPI的区别(转)

    一 CGI原理及其性能 1) CGI概念CGI即通用网关接口(Common Gateway Interface),它是一段程序,运行在服务器上,提供同客户端HTML页面的交互,通俗的讲CGI就象是一座 ...

  7. [转帖]CGI与ISAPI的区别(转)

    CGI与ISAPI的区别(转) 不知道原始网站是哪个 博客园里面也是转帖的 https://www.cnblogs.com/eret9616/p/8515095.html 不过我还是不了解CGI和IS ...

  8. 基础概念PHP-FPM、FastCGI和CGI

    在搭建 LAMP/LNMP 服务器时,会经常遇到 PHP-FPM.FastCGI和CGI 这几个概念.如果对它们一知半解,很难搭建出高性能的服务器.接下来我们就以图形方式,解释这些概念之间的关系. 基 ...

  9. CGI、FastCGI和php-fpm的概念和区别

    CGI是HTTP Server和一个独立的进程之间的协议,把HTTP Request的Header设置成进程的环境变量,HTTP Request的正文设置成进程的标准输入,而进程的标准输出就是HTTP ...

随机推荐

  1. 【BZOJ1857】[Scoi2010]传送带 三分法

    三分套三分,挺神奇的...每次找到,每个传送带的上下两个三等分点,下面那个小,则一定有更优的在中间. #include <iostream> #include <cstdio> ...

  2. jsp使用EL表达式回传boolean值出错的问题

    在最近做的一个项目中使用session回传的属性中有一个为boolean,报出错. 属性名字为"isAdmit",布尔类型.后来我上网查了一下,是因为我使用了Myeclipse的自 ...

  3. 【Linux】crontab 定时任务

    7月份,公司海外运营国发生数据库联接未释放,造成连接池连接不足的情况, 当时查询并没有及时解决问题, 为了避免现场同事多次人工重启系统的,因此写了个shell脚本,通过crontab 实现系统重启,但 ...

  4. placeholder js简单实现

    window.onload = function() { var input = document.getElementById("input"); input.onblur = ...

  5. 前端面试那些坑之HTML篇

    HTML 1.Doctype作用?标准模式与兼容模式各有什么区别? (1).<!DOCTYPE>声明位于位于HTML文档中的第一行,处于<html> 标签之前.告知浏览器的解析 ...

  6. sql查询重复数据

    select *from Awhere id in (select id from A group by id having count(1) >= 2) 注释:id 为重复的关键字(更换成所需 ...

  7. shell命令获取最新文件的名称

    最近有一个需求,在部署游戏战场服时,从程序包到部署需要做一些本地化的操作,手工操作费时费力,故写一个shell脚本,一键部署. 遇到的问题是每次要部署最新的程序包,因此需要shell命令获取最新的文件 ...

  8. centos7 时间设置

    安装完成centos7后,虽然时区选择的是上海,但是最终的时间还是不对,因为没有开启自动同步NTP功能,所以需要自动手动设置. 首先输入timedatectl命令,查看当前机器的时间: Local t ...

  9. angular 中父元素ng-repeat后子元素ng-click失效

    在angular中使用ng-repeat后ng-click失效,今天在这个上面踩坑了.特此记录一下. 因为ng-repeat创造了新的SCOPE.如果要使用这个scope的话就必须使用$parent来 ...

  10. SSHE框架整合(增删改查)

    1.前期准备:jar包(c3p0.jdbc ,各个框架) web.xml文件:spring的   转码的,和Struts2的过滤器 <?xml version="1.0" e ...