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 ...
随机推荐
- Django之jango框架 及 APP
Django框架 MVC框架和MTV框架 MVC,全名是Model View Controller,是软件工程中的软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器 ...
- LEX下出毛病的问题
毛病! 1.今日写词法分析,回想起第一次写时候的蓝色警告:不要随便管理员.so,便Win+R,"cmd",回车. 2.在用lex写的时候,注意注释是 /*注释放于此处*/ 而非一般 ...
- (十)js获取日期
//将日期转换成字符串格式输出 function formatDateToString(){ // 先获取对象日期 var oDate = new Date(); // 从该对象中分别拿出所需要的 年 ...
- Python基本特殊方法之__new__
__new__()和不可变对象 __new__方法的一个用途是初始化不可变对象,__new()__方法中允许创建未初始化的对象,这允许我们在__init__()方法被调用之前先设置对象的属性 例:为f ...
- admins.py总结比较,转
转:http://blog.csdn.net/pipisorry/article/details/46764495
- Dawn 简单使用
1. install npm install dawn -g 2. create project # 1. Create & Initialize $ dn init -t front # ...
- PHP Tools for VS2017 key/破解 [搬运]
看看结果 搬运地址 : (自己敲吧...) 这里面破解的只有一年 时间可以在文中提供的 ------------------------------------------------------- ...
- Linux环境下安装jenkins
废话不多说,直接开始 1.从官网下载Jenkins的war包 2.下载好的War放到Tomcat的网站根目录webapps下,然后启动Tomcat. 3.打开浏览器,输入http://IP:8080/ ...
- STM32从boot跳转到app失败
现象:在每次boot执行完跳转到APP时,都会跑飞 原因:在boot中使用到了USART和TIM,boot执行完没有关闭总中断 方法:在boot执行完跳转之前关闭中断,__disable_irq() ...
- mysql编译参数详解
mysql编译参数详解(./configure) 1.--prefix=PREFIX:指定程序安装路径: 2.--enable-assembler:使用汇编模式:(文档说明:compiling i ...