CGI 的作用

CGI 是为了保证 web server 传递过来的数据是标准格式的,方便 CGI 程序的编写者。

web server(比如说 nginx)只是内容的分发者。

如果请求 /index.html,那么 web server 会去文件系统中找到这个文件,发送给浏览器,这里分发的是静态数据。

如果现在请求的是 /index.php,根据配置文件,nginx 知道这个不是静态文件,需要去找 PHP 解析器来处理,那么他会把这个请求简单处理后交给 PHP 解析器。Nginx 会传哪些数据给 PHP 解析器呢?url、查询字符串、POST 数据、HTTP header 等等,CGI 就是规定要传哪些数据、以什么样的格式传递给后方处理这个请求的协议。

当 web server 收到 /index.php 这个请求后,会启动对应的 CGI 程序,这里就是 PHP 的解析器。接下来 PHP 解析器会解析 php.ini 文件,初始化执行环境,然后处理请求,再以规定 CGI 规定的格式返回处理后的结果,退出进程。web server 再把结果返回给浏览器。

CGI 是个协议,跟进程什么的没关系。

fastCgi 是什么

fastCgi 是用来提高 CGI 程序性能的。

那么 CGI 程序的性能问题在哪呢?"PHP 解析器会解析 php.ini 文件,初始化执行环境",就是这里了。标准的 CGI 对每个请求都会执行这些步骤,所以处理每个请求的时间会比较长。

那么 fastCgi 是怎么做的呢?首先,fastCgi 会先启一个 master,解析配置文件,初始化执行环境,然后再启动多个 worker。当请求过来时,master 会传递给一个 worker,然后立即可以接受下一个请求。这样就避免了重复的劳动,效率自然是高。而且当 worker 不够用时,master 可以根据配置预先启动几个 worker 等着;当然空闲 worker 太多时,也会停掉一些,这样就提高了性能,也节约了资源。这就是 fastCgi 对进程的管理。

PHP-FPM 是什么

PHP-FPM 是一个实现了 FastCgi 的程序,被 PHP 官方收录。

PHP 的解释器是 php-cgi,它只是个 CGI 程序,只能解析请求,返回结果,不会进程管理。所以就出现了一些能够调度 php-cgi 进程的程序,比如说由 lighthttpd 分离出来的 spawn-fcgi。PHP-FPM 也是这么个东西,在长时间的发展后,逐渐得到了大家的认可,也越来越流行。

转载于:https://blog.51cto.com/7814265/1827599

php cgi fastcgi php-fpm区别相关推荐

  1. Nginx + CGI/FastCGI + C/Cpp

    http://www.cnblogs.com/skynet/p/4173450.html Nginx + CGI/FastCGI + C/Cpp 2014-12-19 11:05 by 吴秦, 197 ...

  2. Nginx + CGI/FastCGI + C/Cpp(编不过去,不搞了。。。)(Common Gateway Interface)

    Nginx + CGI/FastCGI + C/Cpp 文章目录 1.CGI 1.1.环境变量 1.2.标准输入 总结:CGI使外部程序与Web服务器之间交互成为可能.CGI程式运行在独立的进程中,并 ...

  3. 漫谈CGI FastCGI WSGI

    作者:auxten 链接:https://zhuanlan.zhihu.com/p/20054757 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. CGI(Comm ...

  4. CGI,FastCGI,spawn-fcgi,nginx组合使用

    目录 fastCGI 1. CGI 1.1 简介 1.2 CGI处理流程 1.3 环境变量 1.4 标准输入 1.5 CGI程序结构 1.6 测试 2. FastCGI 2.1 什么是FastCGI ...

  5. IIS7入门之旅:(3)CGI application和FastCGI application的区别

    前言: 一如既往地,IIS支持通过提供pluggable module来提供对第3方script的支持,例如php等.在IIS7中,对于CGI的支持有了一个新的变化,就是同时提供了2种CGI支持模块, ...

  6. cgi与php的区别,fastcgi与cgi的区别

    fastcgi与cgi有什么不同 前言 现在的CGI基本没人使用,不安全以及性能极其低下,越来越多的使用web内置扩展.fastCGI.例如微软iis的ISAPI,apache的php模块,nginx ...

  7. Fastcgi、CGI 是什么及区别

    1.CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者. 2.web server(比如说nginx)只是内容的分发者. 比如,如果请求/index ...

  8. cgi,fastcgi,php-cgi,php-fpm之间的关系

    参考文章: https://segmentfault.com/q/1010000000256516 http://www.thinkphp.cn/topic/42338.html 这篇文章写的挺好:h ...

  9. CGI与Servlet的区别和联系

    定义: CGI(Common Gateway Interface 公共网关接口)是HTTP服务器与你的或其它机器上的程序进行"交谈"的一种工具,其程序须运行在网络服务器上. 功能: ...

最新文章

  1. “多态枚举”数值如何判断?
  2. python的图表库_python 图表库
  3. SAP UI5 应用开发教程之三十七 - 使用 Chrome 开发者工具 Console 面板进行元素审查试读版
  4. 【LCT】【树状数组】Matches Are Not a Child‘s Play(luogu CF1137F)
  5. linux龙芯自动挂载u盘,Windows Subsystem for Linux (WSL)挂载移动硬盘U盘
  6. 一次完整的HTTP请求响应过程(很详细)
  7. spring4.x(4)--SpringIOC的HelloWorld
  8. 基于JAVA+Servlet+JSP+MYSQL的党员信息管理系统
  9. SpringBoot使用@Transactional
  10. ❤️大佬都在学什么?Python爬虫分析C站大佬收藏夹,跟着大佬一起学, 你就是下一个大佬❤️!
  11. 模板方法模式的房间改造-组合查询
  12. 六、基于UDP的服务器端/客户端
  13. python字典练习_python字典练习
  14. 编译原理第三版陈火旺第二章答案
  15. 基于Unity开发的鼠标打飞碟游戏设计
  16. 海康sdk远程门禁_海康威视远程监控Android端SDK调用示例
  17. 深圳以招聘忽悠面试的培训机构
  18. shell 追加指定内容至某文件
  19. 怎么简单快速的将多个中文文件转换成英文的名称
  20. matlab multiply,MATLAB Matrix Multiply Code效率

热门文章

  1. MyBatis出现红色错误,已解决(Establishing SSL connection without)
  2. 四川大学锦城学院计算机考试题,四川大学锦城学院期考试试题(B卷)_15889.doc
  3. 华为手机怎样才算激活了_外观专利到底怎样才算侵权呢?
  4. MD5消息摘要算法和SHA-1安全散列算法
  5. 在树莓派3B+ 上使用YOLO v3 Tiny进行实时对象检测
  6. 内部控制中对权限分配的要求、权限分配的实现方法
  7. 阿里云十年新战略发布!达摩院加持,阿里技术全部开放,20亿补贴小程序
  8. 赛灵思推7nm加速平台:面向所有场景、所有开放者,AI推理性能提升8倍
  9. 路人实拍Waymo无人车:行为诡异,谨慎到让人怀疑人生
  10. 记一次微信H5全屏播放视频的总结