首先,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

最新文章

  1. 关于Array的map方法中回调函数参数的问题
  2. 【学习笔记】Struts2之配置处理结果
  3. libgdx 裁剪多边形(clip polygon、masking polygon)
  4. background-position
  5. C#的循环语句练习
  6. Eclipse中.setting目录下文件介绍
  7. HTML标签之间不是可以随便嵌套的
  8. Java常见排序算法之归并排序
  9. 9、XAML名称空间详解
  10. 大数据时代的 9 大Key-Value存储数据库
  11. 新的方法 (New Approach)¶
  12. Java存储区域——JVM札记<一个>
  13. 异步编程(Async和Await)的使用
  14. 怎么在Windows下安装Linux虚拟机
  15. access restriction
  16. 设计模式之“Decorator”注疏#02
  17. linux远程控制
  18. Python函数式编程之闭包
  19. SpringMVC框架五:图片上传与JSON交互
  20. ORM增删改查(django)

热门文章

  1. phpcms V9二级目录下分页路径不正确问题的彻底解决方法
  2. 【学习】JennyHui学英语 - 生词积累
  3. C++11新特性之字节对齐、多参数模版、placement new
  4. kali学习
  5. 【4】JDK和CGLIB生成动态代理类的区别
  6. bzoj 3501 PA2008 Cliquers Strike Back——贝尔数
  7. 有关implicit Intent的使用
  8. RAC 11gR2模拟OCR和Votedisk损坏恢复过程
  9. DM8127 更改调试串口为UART2
  10. java随机数组