CGIFastCGIPHP-CGIPHP-fpm

今天我们来聊一下 CGIFastCGIPHP-CGIPHP-fpm 这四个概念


CGI

通用网关接口(Common Gateway Interface)即 CGI,是一种网关协议,是外部应用程序(CGI 程序)与 Web 服务器之间的接口标准,是在 CGI 程序和 Web 服务器之间传递信息的规程

通俗一点来讲,PHPJavaPython 等喜欢和 Web 服务器(Apache, Nginx 等)聊天,但是每个人说的语言都不一样,所以说这个时候我们的 CGI 童鞋就勇敢的站出来充当这个翻译官的身份,把各个语言都翻译为统一的 web server 能懂的语言,这就是 CGI 的作用了 ~ ~ ~

CGI 本质还是一个协议,他允许 web server 执行外部程序,并且将程序输出内容传递给 web server

CGI 在遇到外部请求时会先 fork 出一个 CGI 子进程,然后处理请求,执行完毕后再结束这个子进程,这就是所谓的 fork-and-execute 模式,这样的话,有多少的请求,就会出现多少个子进程,子进程的反复加载,每次都会初始化执行环境,造成了很多不必要的开销,导致了 CGI 的性能低下

如何解决这个问题呢?那就该我们的 FastCGI 登场了 ~ ~ ~


FastCGI

FastCGI 是一个可伸缩地、高速地在 HTTP server 和动态脚本语言间通信的接口,可以理解为 CGI 的升级版

通俗一点来讲,还是上述的那个场景,CGI 每翻译一次都要去书里面查找资料,导致翻译效率太低,于是乎,FastCGI 就来了,他记忆力比较好,看一遍就能背下来,所以只需要第一次去记下来,之后就能高效的进行工作 ~ ~ ~

因为 CGI 每次都会重新加载,重新初始化执行环境,重新启动脚本解析器,导致了性能低下,FastCGI 像是一个常驻(long-live)型的 CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去 fork 一次,如果 CGI 解释器保持在内存中并接受 FastCGI 进程管理器调度,则可以提供良好的性能、伸缩性、Fail-Over 特性等等

FastCGI 接口方式采用 C/S 结构,可以将 HTTP 服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当 HTTP 服务器每次遇到动态程序时,可以将其直接交付给 FastCGI 进程来执行,然后将得到的结果返回给浏览器。这种方式可以让 HTTP 服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

一般情况下,FastCGI的整个工作流程是这样的:

  • Web Server 启动时载入FastCGI 进程管理器

  • FastCGI 进程管理器自身初始化,启动多个 CGI 解释器进程(多个php-cgi)并等待 Web server 的连接

  • 当客户端请求到达 Web Server 时,FastCGI 进程管理器选择并连接到一个 CGI 解释器。Web server 将 CGI 环境变量和标准输入发送到 FastCGI 子进程 php-cgi

  • FastCGI 子进程完成处理后将标准输出和错误信息从同一连接返回 Web Server。当 FastCGI 子进程关闭连接时,请求便告处理完成。FastCGI 子进程接着等待并处理来自 FastCGI 进程管理器(运行在 Web Server 中)的下一个连接


PHP-CGI

PHP-CGI 是 PHP 自带的 FastCGI 管理器

PHP 的解释器是 php-cgiphp-cgi 只是个 CGI 程序,他自己本身只能解析请求

不足之处在于,更改 php.ini 配置后需重启 php-cgi 才能让新的 PHP 配置生效,不可以平滑重启


PHP-fpm

FastCGI 的特点是会在一个进程中依次完成多个请求,以达到提高效率的目的,大多数 FastCGI 实现都会维护一个进程池。

PHP-fpm 就是针对于 PHP 的 FastCGI 的一种实现,他负责管理一个进程池,来处理来自 Web 服务器的请求。目前,PHP-fpm 是内置于 PHP 的。

但是 PHP-fpm 仅仅是个”PHP FastCGI 进程管理器”, 它仍会调用 PHP 的解释器本身来处理请求

PHP-fpm 提供了更好的 PHP 进程管理方式,可以有效控制内存和进程、可以平滑重载 PHP 配置

PHP-fpm 的使用非常方便,配置都是在 PHP-fpm.ini 的文件内,而启动、重启都可以从 php/sbin/PHP-fpm 中进行。更方便的是修改 php.ini 后可以直接使用 PHP-fpm reload 进行加载,无需杀掉进程就可以完成 php.ini 的修改加载

PHP-fpm 是守护 php-cgi 的进程管理器。

谈谈 CGI、FastCGI、PHP-CGI、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与php的区别,fastcgi与cgi的区别

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

  4. 漫谈CGI FastCGI WSGI

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

  5. php cgi fastcgi php-fpm区别

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

  6. fastcgi与cgi的区别

    fastcgi与cgi的区别 先讲下cgi: cgi在2000年或更早的时候用得比较多, 以前web服务器一般只处理静态的请求,如果碰到一个动态请求怎么办呢?web服务器会根据这次请求的内容,然后会f ...

  7. 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 ...

  8. php cgi限制,php cgi对单个流量最大执行时间和作用域

    一,总结 php.ini的max_execution_time设置的超时时间是指:cgi worker进程处理一次请求的周期中,占用cpu时间分片的最大总时间,不包括系统调用,比如本地磁盘io等待时间 ...

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

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

  10. Fastcgi、CGI 是什么及区别

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

最新文章

  1. Web前端优化最佳实践及工具集锦
  2. AI学会了用“人眼”看世界,甚至连人类瞳孔的细微缩放都能模拟 | 杜克大学...
  3. mysql 5.3 build4.234_mysql版本3.23跟4.1区别
  4. jsp 使用base标签 没有作用_JSP学习篇
  5. boost::icl::interval_map用法的测试程序
  6. 数组分成两组差值最小 python_数组中的数分为两组,让给出一个算法,使得两个组的和的差的绝对值最小,数组中的数的取值范围是0x100,元素个数也是大于0, 小于100 。...
  7. 算法-排序-k排序(算法导论第三版第八章思考题8-5)
  8. 使用JSF的面向服务的UI
  9. Centos中配置环境变量
  10. 《Android和PHP开发最佳实践》一1.3 如何学习Android和PHP
  11. XP的常见蓝屏代码和解决方案
  12. transformermo
  13. ios 绘制线框_iOS中画矩形的几种方法总结
  14. [附源码]Java计算机毕业设计SSM大众点评管理系统
  15. 路由器多区域 OSPF 配置
  16. 【前端】静态网页和动态网页
  17. ActiveMQ的简单实现
  18. 【ML/DL】python3学习《机器学习实战》书中的报错及解决办法
  19. CDOJ-1057 秋实大哥与花(线段树区间更新)
  20. 冷冲压工艺缺陷及处理办法,常见产品展开工艺技术归纳

热门文章

  1. Greedy 贪心算法
  2. MySql8.0安装教程与时区问题
  3. 计算机视觉 — BOF图像检索
  4. 使用工具清理Windows的winsxs目录
  5. windows ESP分区丢失处理方案与磁盘分区注意事项
  6. 水晶报表导出PDF or Excel,并返回文件到用户的IE浏览器中
  7. 【Wing Loss】《Wing Loss for Robust Facial Landmark Localisation with Convolutional Neural Networks》
  8. Resolution-robust Large Mask Inpainting with Fourier Convolutions 解读
  9. 2011年09月04日
  10. 字节跳动混沌工程实践总结