php-fpm, nginx ,fastcgi ,php-cgi 关系粗解
首先,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 关系粗解的更多相关文章
- nginx fastcgi php-fpm的关系梳理
CGI(Common Gateway Interface)CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具 ...
- (转)nginx与PHP的关系
php是一门编程语言,可以编写很多程序,但是只有php的话,你的php只能在你的服务器里孤立的运行,比如你用php写了一个可以通过身高计算人的标准体重的程序,虽然这个程序可以在服务器运行,但是他还不能 ...
- nginx、fastCGI、php-fpm关系梳理(转)
前言: Linux下搭建nginx+php+memached(LPMN)的时候,nginx.conf中配需要配置fastCGI,php需要安装php-fpm扩展并启动php-fpm守护进程,nginx ...
- CGI、FastCGI和PHP-FPM关系图解
CGI.FastCGI和PHP-FPM关系图解 webapp即是php解析器等 当Web Server收到 index.php 这个请求后,会启动对应的 CGI 程序,这里就是PHP的解析器.接下 ...
- 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守护进程, ...
- nginx、fastCGI、php-fpm关系梳理(转载参考)
nginx.fastCGI.php-fpm关系梳理 还可以参考:http://www.cnblogs.com/skynet/p/4173450.html 前言: Linux下搭建nginx+php ...
- nginx、fastCGI、php-fpm关系梳理
前言: Linux下搭建nginx+php+memached(LPMN)的时候,nginx.conf中配需要配置fastCGI,php需要安装php-fpm扩展并启动php-fpm守护进程,nginx ...
- Nginx + fastcgi + php 的原理与关系
CGI:Common Gateway Interface 公共网关接口,web服务器和脚本语言通信的一个标准.接口.协议[协议] FastCGI:CGI协议的升级版[协议] PHP-CGI: 实现了C ...
- 记录一次自己对nginx+fastcgi(fpm)+mysql压力测试结果
nginx + fastcgi(fpm) 压力测试: CentOS release 5.9 16核12G内存 静态页面: 并发1000,压测200秒,测试结果: 系统最大负载5.47 成功响应: 25 ...
随机推荐
- zend studio 提升开发效率的快捷键及可视化订制相关设置
Zend studio快捷键使用 F3 快速跳转到当前所指的函数,常量,方法,类的定义处,相当常用.当然还可以用Ctrl+鼠标左键 shift+end 此行第一个到最后一个 shift+home 此行 ...
- PHP读取文件函数fread,fgets,fgetc,file_get_contents和file函数的使用总结
fread().fgets().fgetc().file_get_contents() 与 file() 函数用于从文件中读取内容. 1.fread() fread()函数用于读取文件(可安全用于二进 ...
- CodeForces - 963D:Frequency of String (bitset暴力搞)
You are given a string ss. You should answer nn queries. The ii-th query consists of integer kiki an ...
- Redis设计与实现 (三): 字典
哈希表 结构定义dict.h/dictht /* * 哈希表 * * 每个字典都使用两个哈希表,从而实现渐进式 rehash . */ typedef struct dictht { // 哈希表数 ...
- iOS AnchorPoint 引起的坐标问题
这里主要讨论设置AnchorPoint 改变时,会影响我们预期的布局问题: 一.初始代码布局 //参照页面 UIView *aView = [[UIView alloc]initWit ...
- python 的os的总结
转:http://www.cnblogs.com/BeginMan/p/3327291.html
- Jave 文件介绍
Java程序的基本组成单元是类,有class声明,类体中包括属性和方法. 一个Java文件中可以有多个class声明,但由public修饰的类只能有一个,并且类名作为该文件的名称. 每一个应用程序都必 ...
- CString 中的SpanIncluding 和SpanExcluding 用法
SpanIncluding 简单的理解就是提取包含在指定串中的一个子串 MSDN上的备注说:从左边的第一个字符开始查找与给定串相等的字符,如果没有则返回空的串,反之,继续查找,到结束. 例子方便理解 ...
- maven环境配置详解,及maven项目的搭建及maven项目聚合
首先:Maven 3.2.1:不同版本中仓库中文件是不一样的,Maven运行,先找用户配置,再找全局配置 1. Maven全局配置:全局统一的配置文件,在maven的安装目录中 2. Maven用户配 ...
- easyui的datagird动态设置当前页数
if (ishas) { $("#tg").datagrid("options").pageNumber = 1; $('#tg').datagrid('rel ...