首先,CGI 是干什么的?  CGI 是为了保证web server传递过来的数据是标准格式。CGI  是个协议和 进程没什么关系。

CGI 是http服务器于你的本机或者其他电脑上的程序交谈的一种工具。其程序必须运行在网络服务器上。

fastcgi  是一个与平台和语言无关的接口。只要按照它本身的接口来调用 都能实现语言和web service的通信。

CGI处理步骤:

1用户通过internet 把用户请求发送到服务器。

2 服务器接受到用户请求并交给cgi程序处理。

3cgi 程序吧处理结果传送给服务器。

4服务器吧结果送回到用户。

但是cgi 每次满次请求之后都会被杀死该进程。 因为cgi每次请求的时候先创建 之后处理请求 在再被杀死。 而fastcgi 则是创建之后 不会被杀死 在等待下一次的请求。

————————————————

用户请求分静态请求和动态请求。比如:html  就是静态   。php  就是动态请求

web server(如nginx)  只是内容的分发着。如果请求一个 index.html 那么web server 回去页面中找到

这个文件,并返回给浏览器。这里的分发是静态数据。

PHP 的解释器是 php-cgi,它只是个 CGI 程序,只能解析请求,返回结果.

动态请求:请求一个 index.php

当nginx 接收到一个 http 请求的时候  通过配置文件找到对应的服务(location),location再找到对应的配置如:

找到以.php结尾的文件的请求交给  127.0.0.1:9000 去处理。这里 的ip 和端口就是fastCGI 进行监听的ip和端口。fastcgi 进行请求处理。再通过nginx 返回给客户端。

补充一下: fastcgi  像是cgi的升级版。 当fastcgi 被调用时 会初始化多个CGi(如果是php的文件 则启动多个php-cgi解析器),等待请求 .当有请求处理完的时候 CGI(这里是php文件so 就是php-cgi)处理完成后会被杀死。 而fastcgi 会继续等待下一次请求。周而复始。。。

php-fpm 是一个实现了fastcgi的管理

大家都知道php 的解析器是php-cgi php-cgi只是CGI的一个程序。他本身只能解析请求,返回结果。不会进程管理。所以出现了一些

调度php进程的管理 例如 php-fpm。就是这样的。

nginx  本身不会对php 进行解析。当有php  请求的时候 nginx 会把 调用 fastcgi进程来监听地址和 端口。 php-fpm来 动态解析服务器处理 返回给ngixn .

php-fpm 是管理进程的fastcgi的。

Nginx 的反向服务代理   就是当php有动态请求的时候将 动态请求交给 php-fpm  从而实现了 动态解析了php.

*******关于fastcgi 是CGI的升级版 或者 优化版的说法我也整理了些资料 大家看看 有什么不对的请指出。

php-cgi 的缺点

1.php-cgi 边个php.ini 后 需要重启php-cgi  才能生效。不能平滑重启

2. php-cgi 被杀死以后就php 就不能使用了。

php-cgi 接收到请求后,初始化环境 初始化php.ini. 处理请求。返回数据。

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

本文 (一部分)转载于:https://segmentfault.com/q/1010000000256516

php-fpm, nginx ,fastcgi ,php-cgi 关系粗解的更多相关文章

  1. nginx fastcgi php-fpm的关系梳理

    CGI(Common Gateway Interface)CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具 ...

  2. (转)nginx与PHP的关系

    php是一门编程语言,可以编写很多程序,但是只有php的话,你的php只能在你的服务器里孤立的运行,比如你用php写了一个可以通过身高计算人的标准体重的程序,虽然这个程序可以在服务器运行,但是他还不能 ...

  3. nginx、fastCGI、php-fpm关系梳理(转)

    前言: Linux下搭建nginx+php+memached(LPMN)的时候,nginx.conf中配需要配置fastCGI,php需要安装php-fpm扩展并启动php-fpm守护进程,nginx ...

  4. CGI、FastCGI和PHP-FPM关系图解

    CGI.FastCGI和PHP-FPM关系图解   webapp即是php解析器等 当Web Server收到 index.php 这个请求后,会启动对应的 CGI 程序,这里就是PHP的解析器.接下 ...

  5. nginx、fastCGI、php-fpm关系梳理(转载 http://blog.sina.com.cn/s/blog_6df9fbe30102v57y.html)

        前言: Linux下搭建nginx+php+memached(LPMN)的时候,nginx.conf中配需要配置fastCGI,php需要安装 php-fpm扩展并启动php-fpm守护进程, ...

  6. nginx、fastCGI、php-fpm关系梳理(转载参考)

    nginx.fastCGI.php-fpm关系梳理 还可以参考:http://www.cnblogs.com/skynet/p/4173450.html   前言: Linux下搭建nginx+php ...

  7. nginx、fastCGI、php-fpm关系梳理

    前言: Linux下搭建nginx+php+memached(LPMN)的时候,nginx.conf中配需要配置fastCGI,php需要安装php-fpm扩展并启动php-fpm守护进程,nginx ...

  8. Nginx + fastcgi + php 的原理与关系

    CGI:Common Gateway Interface 公共网关接口,web服务器和脚本语言通信的一个标准.接口.协议[协议] FastCGI:CGI协议的升级版[协议] PHP-CGI: 实现了C ...

  9. 记录一次自己对nginx+fastcgi(fpm)+mysql压力测试结果

    nginx + fastcgi(fpm) 压力测试: CentOS release 5.9 16核12G内存 静态页面: 并发1000,压测200秒,测试结果: 系统最大负载5.47 成功响应: 25 ...

随机推荐

  1. phpcms v9 tags调用方法

    {loop $keywords $keyword} <a href="{APP_PATH}index.php?m=content&c=tag&catid={$catid ...

  2. 抛弃Https让Cas以Http协议提供单点登录服务

    本文环境: 1.apache-tomcat-7.0.50-windows-x86 2.cas-server-3.4.11 3.cas-client-3.2.1 将cas-server-webapp-3 ...

  3. 为什么 I2C(IIC)需要上拉电阻

    源鑫问: I2C时钟线和数据线为什么要接上拉电阻? 因为 I2C 的 IO 是开漏的,所以需要上拉电阻. 延伸: 之前 hippo曾经说过有人将 IO 设置为 PP,可能会烧 IO. 之前以为 I2C ...

  4. new JSONObject()报错

    如果缺少下列依赖包会报错: 1.commons-beanutils-1.7.0.jar 2.commons-collections-3.2.1.jar 3.commons-lang-2.3.jar 4 ...

  5. shell中字体变色

    在linux中给字体使用数字代码变色 字体颜色代码:重置0 ,黑色30,红色31,绿色32,黄色33,蓝色34,洋红35,青色36,浅灰37 效果代码:1m加粗  2m加下划线  5m闪动效果  7m ...

  6. 有限状态机(Finite-state machine, FSM)的C语言实现

    有限状态机,也称为FSM(Finite State Machine),其在任意时刻都处于有限状态集合中的某一状态.当其获得一个输入字符时,将从当前状态转换到另一个状态,或者仍然保持在当前状态.任何一个 ...

  7. java从键盘输入若干数,求其最大值,最小值,平均值。等等

    总结:有一定基础的人,应该发现第一个程序可以运行,其实它有个致命的错误.有谁能一眼看出来呢?第二个程序是对的. 这个题目求最大值,最小值,平均值我不会求,不知道这个if判断放在类的外面还是main函数 ...

  8. Java-Maven-Runoob:Maven环境配置

    ylbtech-Java-Maven-Runoob:Maven环境配置 1.返回顶部 1. Maven 环境配置 Maven 是一个基于 Java 的工具,所以要做的第一件事情就是安装 JDK. 如果 ...

  9. ITextSharp Table使用 (转)

    原文:http://www.cnblogs.com/LifelongLearning/archive/2011/05/16/2048116.html 表格是我们在制作文档时,经常使用的一个元素.对布局 ...

  10. 1147 Heaps

    1147 Heaps(30 分) In computer science, a heap is a specialized tree-based data structure that satisfi ...