FastCgi与PHP-fpm关系
|
1 CGI
(1)什么是CGI:
CGI(Common Gateway Interface)公共网关接口, 是WWW技术中最重要的技术之一,有着不可替代的重要地位, CGI是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递消息的规程。CGI规范允许WEB服务器执行外部程序,将他们的输出发送给Web浏览器, CGI将Web的一组简单的超媒体文档变成一个完整的新的交互式媒体。
(2)CGI的目的:
CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者。
(3)CGI的处理过程:
web server (比如nginx)只是内容的分发者。
比如,如果请求/index.html, 那么web server会去文件系统中找到这个文件,发送给浏览器,这里分发的是静态数据。
如果现在请求的是/index.php,根据配置文件,nginx知道这个不是静态文件,需要去找PHP解析器来处理,那么它会把这个请求简单处理后交给PHP解析器。Nginx会传那些数据给(如url,查询字符串,POST数据,HTTP header)PHP解析器呢?CGI就是规定要传哪些数据、以什么样的格式传递给后方处理这个请求的协议。
当web server收到/index.php这个请求后,会启动对应的CGI程序,这里就是PHP的解析器。接下来PHP解析器会解析php.ini文件,初始化执行环境,然后处理请求,再以规定CGI规定的格式返回处理后的结果,退出进程。web server再把结果返回给浏览器
(4)CGI的功能描述:
绝大多数的CGI程序被用来解释处理来自表单的输入信息, 并在服务器产生相应的处理,或将相应的信息反馈给浏览器。CGI程序是网页具有交互功能
(5)小结:
过以上所述,CGI是个协议,跟进程什么的没有关系
2 Fastcgi
(1)Fastcgi的作用:
Fastcgi是用来提高CGI程序性能的。
(2)CGI程序的性能问题:
”PHP解析器会解析php.ini文件,初始化执行环境“,就是这里了。标准的CGI对每个请求都会执行这次步骤(不嫌累呀!启动进程很累的说!),所以处理每个请求的时间会比较长,这明显不合理!
(3)Fastcgi是做什么的:对进程进行管理
首先Fastcgi会先启动一个master,解析配置文件,初始化执行环境,然后再启动多个worker。当请求过来时,master会传递给一个worker,然后立即可以接受下一个请求。这样就避免了重复的劳动,效率自然是高。而且当worker不够用时,master可以根据配置预先启动几个worker等着;当然空闲worker太多时,也会停掉一些,这样就提高了性能,也节约了资源。这就是fastcgi的对进程的管理
3 PHP-FPM
php的解析器是php-cgi。php-cgi只是个CGI程序,他自己本身只能解析请求,返回结果,不会进程管理,所以就出现里一些能够调度php-cgi进程的程序,而PHP-FPM就是能够调度php-cgi进程的程序中的一种。PHP-FPM在长时间的发展后,逐渐得到了大家的认可
PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch你的PHP源代码中,在编译安装PHP 后才可以使用。PHP5.3.3已经继承php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进 程,可以平滑重载PHP配置
4 小结
(1)cgi是公共网关接口,以进程方式工作。即当有请求时就创建一个cgi进程,应用程序结束时关闭cgi进程 并退出内存
(2)fastcgi是cgi的拓展,应用程序结束时,fastcgi进程不退出内存,而是等待下一个请求。php 的cgi方式都是fastcgi方式,在php4就是这样的
(3)php-fpm是fastcgi管理器。在此之前,fastcgi进程是由操作系统管理的,一旦某个fastcgi进程发生故障,就可能危机操作系统的正常运行.php-fpm的作用就是在操作系统和fastcgi之间建立一道围墙,从而阻断了fastcgi的故障向操作系统的传播
|
FastCgi与PHP-fpm关系的更多相关文章
- Nginx 解析PHP的原理 | CGI、FastCGI及php-fpm的关系
Nginx解析PHP的原理,CGI/FastCGI以及PHP-Fpm的关系. 一.PHP+Nginx应运而生的场景.随着互联网的发展,用户对此接受面广,数据流的增大使得Web端的运行承载压力日益增大, ...
- Nginx解析PHP的原理 | CGI、FastCGI及php-fpm的关系
Nginx解析PHP的原理,CGI/FastCGI以及PHP-Fpm的关系. 一.PHP+Nginx应运而生的场景.随着互联网的发展,用户对此接受面广,数据流的增大使得Web端的运行承载压力日益增大, ...
- Nginx-->进阶-->原理-->Nginx+php+fastcgi的原理与关系
一.用户对动态PHP网页访问过程 用户浏览器发起对网页的访问:http://192.168.1.103/index.php 用户和nginx服务器进行三次握手进行TCP连接(忽略包括nginx访问控制 ...
- 关于CGI、FastCGI和PHP-FPM的关系
1.CGI是干嘛的? CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者. web server(比如说nginx)只是内容的分发者.比如,如果请求/index.h ...
- PHP-CGI,FASTcgi,php-fpm,之间的关系?
刚开始对这个问题我也挺纠结的,看了<HTTP权威指南>后,感觉清晰了不少.首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者. ...
- PHP-CGI、FASTCGI和php-fpm的关系
首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者. web server(比如说nginx)只是内容的分发者.比如,如果请求/index.h ...
- php 中 FastCGI与cgi的关系,何为fastcgi
FastCGI是语言无关的.可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持 在内存中并因此获得较高的性能.众所周知,CGI解释器的反复加载是CGI性能低下的主要原因, 如果CGI解释器 ...
- 【转】搞不清FastCgi与php-fpm之间是个什么样的关系?
我在网上查fastcgi与php-fpm的关系,查了快一周了,基本看了个遍,真是众说纷纭,没一个权威性的定义. 网上有的说,fastcgi是一个协议,php-fpm实现了这个协议: 有的说,php-f ...
- 搞不清FastCgi与PHP-fpm之间是个什么样的关系 - SegmentFault
搞不清FastCgi与PHP-fpm之间是个什么样的关系 - SegmentFault 搞不清FastCgi与PHP-fpm之间是个什么样的关系 3赞 踩 收藏 我在网上查fastcgi与php-fp ...
- 搞不清FastCgi与php-fpm之间是个什么样的关系
我在网上查fastcgi与php-fpm的关系,查了快一周了,基本看了个遍,真是众说纷纭,没一个权威性的定义. 网上有的说,fastcgi是一个协议,php-fpm实现了这个协议: 有的说,php-f ...
随机推荐
- spring 多数据源一致性事务方案
spring 多数据源配置 spring 多数据源配置一般有两种方案: 1.在spring项目启动的时候直接配置两个不同的数据源,不同的sessionFactory.在dao 层根据不同业务自行选择使 ...
- Oracle RAC 更换存储实验
实验环境准备: RHEL 6.5 + Oracle 11.2.0.4 RAC (2nodes) OCR和Voting Disk使用的是OCR1磁盘组,底层对应3个1G大小的共享LUN,一般冗余: DA ...
- SSRS 实用技巧 ---- 为表格添加展开/折叠操作(明细报表)
相信很多人都会遇到这样的需求:当表格按照某几个列分组时,需要为组添加展开和折叠的操作. 最初展现表格的时候只展现最外层分组,然后点击展开后可以查看分组内的明细情况. 先来一张效果图,然后再看具体如何实 ...
- LINQ to SQL语句(17)之对象加载
对象加载 延迟加载 在查询某对象时,实际上你只查询该对象.不会同时自动获取这个对象.这就是延迟加载. 例如,您可能需要查看客户数据和订单数据.你最初不一定需要检索与每个客户有关的所有订单数据.其优点是 ...
- WPF 虚拟化 VirtualizingWrapPanel 和 VirtualLizingTilePanel
一. UI 上两个扩展 public class VirtualizingWrapPanel : VirtualizingPanel, IScrollInfo { #region Fields UI ...
- C#和Java中的Substring()
吐槽-使用清理软件整理电脑要注意,不要清理的"太狠",不然你会受伤的! C#中的Substring() 示例 实现代码 using System;using System.Coll ...
- 使用PD(PowerDesigner)图如何快速生成创建数据库表的SQL脚本
打开PD软件: 1.新建概念模型(conceptual Data Model) File-->New Model-->Conceptual Data Mode 或者点击工作区,右键--&g ...
- 在公有云AZURE上部署私有云AZUREPACK以及WEBSITE CLOUD(二)
前言 (二)建立虚拟网络环境,以及域控和DNS服务器 1搭建虚拟网络环境 在Azure上创建虚拟网络.本例选择的是东南亚数据中心.后面在创建虚机的时候,也选择这个数据中心. VNet Name: ...
- C#开发微信门户及应用(32)--微信支付接入和API封装使用
在微信的应用上,微信支付是一个比较有用的部分,但也是比较复杂的技术要点,在微商大行其道的年代,自己的商店没有增加微信支付好像也说不过去,微信支付旨在为广大微信用户及商户提供更优质的支付服务,微信的支付 ...
- spring mvc 和spring security配置 web.xml设置
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmln ...