Web服务器

php是为web而生的一种后端语言,但是php也仅仅只是一种后端语言,要实现web开发, 我们需要html,javascript,css等开发语言的协助才能将网页展示在网页上。另外,我们知道,在web开发中,我们需要配置自己的开发环境,包括php、apache/nginx/iis、mysql,有时候还需要redis、memchaed、mongdb等。在这些软件中,nginx、apache、iis就被称之为web服务器。web服务器的作用就是接受用户的请求,如浏览器的Http请求,并将请求的数据,例如:header头,参数,请求内容等,转发到相应的应用程序,如php、java、python、c开发的程序,并将执行结果返回给浏览器。

在PHP web开发中,我们知道,如果浏览器请求的是html、jpg、css、js等静态文件,是不需要由PHP处理,直接返回给浏览器的。这就是为什么伪静态需要配置在nginx/apache上。

CGI

由于web服务器只能处理静态资源,不能直接运行php、asp、jsp、py等等,只能由各个应用程序自己内部处理。所以,web服务器与php、asp等进行了接口约定,要求双方按照协议(接口)来进行实现,web服务器只需要将请求的数据转发到对应的接口上,就完成了自己的工作。应用程序则按照协议要求的返回接口,返回给web服务器,由web服务器返回浏览器即可。

在这个请求过程中,我们把双方约定的协议(接口)称为CGI协议。

CGI协议,Common Gateway Interface,公共网关接口,是web服务器和外部应用程序直接传递信息的接口标准。也就是说,CGI实际上是一个接口标准,我们通常所说的CGI指的是CGI程序,即实现了CGI接口标准的程序,如 php-cgi等。

CGI的问题:

由于web服务器一般只处理静态资源,对于动态资源,web服务器会开启一个新的进程来启动CGI进程,将请求的数据交给CGI进程。CGI的启动需要加载配置文件(php.ini)、扩展等等,再解析动态脚本,将结果返回到web服务器,随后,web服务器关闭掉重新开启的进程。这种效率是十分低下的,并且对于高并发,是很浪费服务器资源的。

我们来看下Apache的处理过程:

在配置Apache的配置中:我们需要在配置文件httpd.conf中加上:

LoadModule php7_module "D:/phpServer/php72/php7apache2_4.dll"

AddType application/x-httpd-php .php .html .htm

当用户通过浏览器访问时,Apache判断是动态资源时,启动php7_module,php7_module通过SAPI(类似于socket的通信)调用PHP。在这种模式下,apahce请求一次,就会产生一条进程,进程内包含PHP的配置文件、扩展、数据处理计算等等。当用户过多,并发过多时,服务器就会出现问题。

而且,把mod_php放进apache内,很难定位是Apache的问题,还是php的问题。

FastCGI

fastcgi是cgi的升级版,fasgcgi会启动一个master(长驻在内存中),解析配置文件,加载扩展,启动多个worker(php-cgi)。当web服务器转发请求过来时,fastcgi会分配worker,然后接受下一个请求,当worker处理完请求时,并不会退出,而且继续等待下一个请求任务。这样就避免重复加载配置文件、扩展等一系列的启动工作,效率是很高的。当然。fastgcgi也是一种协议(接口),通常所说的fastcgi 是指实现了fastcgi协议的应用程序。

PHP-FPM

php-cgi 就是PHP实现的自带的fastcgi管理器。但是phpcgi性能很差,而且不能平滑重启,主要体现在,修改php.ini文件后,需要重启才能生效这一点上。

在2004年,Andrei Nigmatulin开发了 php-fpm,彻底打破了这种局面,是一个PHP专用的fastcgi管理器,并且在php5.3之后,内置在php内部。

由于PHP-CGI只是一个CGI程序,只能解析请求,返回结果,不能进行进程管理,所以php-fpm也是用于调度管理PHP解析器php-cgi的管理程序。

php-fpm 内部是通过生成新的子进程实现php.ini修改后的平滑重启。

cgi php-fpm,CGI、FastCGI、PHP-FPM的区别以及详解 | 剑花烟雨江南相关推荐

  1. tengine php fpm,FPM打包工具制作Tengine为RPM包详解

    目录 1.Tengine编译安装 2.FPM制作Tengine为RPM包 3.总结 1.Tengine编译安装[root@php ~]# cat /etc/issue CentOS release 6 ...

  2. IIS8 使用FastCGI配置PHP环境支持 过程详解

    平时帮朋友们配置过一些PHP环境的服务器,但是一直使用的都是Apache HTTP+PHP,今天呢,我吧IIS+PHP配置方式给大家发一下下~呵呵. 在这里,我使用的是FastCGI模块映射的方式配置 ...

  3. Windows下图文详解PHP三种运行方式(php_mod、cgi、fastcgi)

    PHP能不能成功的在Apache服务器上运行,就看我们如何去配置PHP的运行方式.PHP运行目前为止主要有三种方式: a.以模块加载的方式运行,初学者可能不容易理解,其实就是将PHP集成到Apache ...

  4. CGI、PHP-CGI、FastCGI

    CGI 一. CGI是什么 CGI,全称是Common Gateway Interface,翻译过来就是"通用网关接口",定义了一个接口标准,描述了数据怎么在服务器和外部应用程序之 ...

  5. sapi/cgi/php-cgi,sapi/cgi/php-cgi

    PHP不一定要以http方式调用.PHP与其它应用的接口叫做SAPI,选用不同的SAPI决定了调用PHP的方式.例如Apache的mod_php就是一个SAPI的实现,用于Apache与PHP交互,同 ...

  6. php怎么安装fpm,apache php fpm安装方法详解

    apache php fpm的安装方法:首先安装"php5.6 fast-cgi"模式:然后配置apache:接着添加对php页面的支持:最后开启url rewrite及虚拟主机即 ...

  7. php cgi限制,php cgi对单个流量最大执行时间和作用域

    一,总结 php.ini的max_execution_time设置的超时时间是指:cgi worker进程处理一次请求的周期中,占用cpu时间分片的最大总时间,不包括系统调用,比如本地磁盘io等待时间 ...

  8. php fpm 统计,php实现fpm开启状态统计的方法

    这篇文章主要给大家介绍了php-fpm开启状态统计的方法,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧. 本文主要给大家介绍了关于php-fpm开启状态统计的相关内容 ...

  9. phpstudy的php fpm,PHP_php-fpm配置详解,php5.3自带php-fpm复制代码 代码 - phpStudy

    php-fpm配置详解 php5.3自带php-fpm /usr/local/php/etc/php-fpm.conf pid = run/php-fpm.pid pid设置,默认在安装目录中的var ...

最新文章

  1. 蓝桥杯java第七届决赛第一题--愤怒小鸟
  2. linux中特殊字符的含义,Linux中的特殊符号以及特殊语法
  3. 企业实战_13_MyCat清除冗余数据
  4. java简单自定义Annotation
  5. JAVA API 中文版
  6. 苹果 M1 “痛失” Windows 11!
  7. nndl学习笔记(二)反向传播公式推导与详解
  8. 大数据开发笔记(一):HDFS介绍
  9. Win10系列:JavaScript 项目模板中的文件和项模板文件
  10. 无人驾驶插秧机智能辅助系统_北斗年会 | 智慧农业:插秧“神器”大显身手——雷科防务致力于高精度无人驾驶插秧机前装应用...
  11. win10电脑装USB CAN 1报错代码39
  12. 《Android源码设计模式》之策略模式
  13. 【JavaScript:快速入门】
  14. 学习进度总结————王烁130201218
  15. 如何选择CDN?你需要关注这三个方面
  16. 【信息系统项目管理师】信息系统主流开发方法之结构化方法、面向对象方法和原型法总结
  17. ffmpeg 分辨率 压缩_视频怎么在尽量不损害画质的前提下压缩?
  18. ddr2是几代内存_如何区分DDR1 DDR2 DDR3内存条
  19. 浏览器及一些常用的兼容性
  20. 代理的基本原理 及用Xpath爬取代理网站IP列表 测试并存入数据库

热门文章

  1. [转] 不被多数人知道但却超好的东东
  2. 数值分析公式大赏(上)
  3. 获取验证码按钮点击后,一分钟内不可继续点击
  4. Silverlight MMORPG网页游戏开发课程[一期] 第十课:面向对象的重构
  5. 阅读笔记-工程师思维
  6. android自动路由,输入路由  |  Android 开源项目  |  Android Open Source Project
  7. 什么是 OpenJ9
  8. 怎么像编辑提供wb原图_WB图片处理-教你利用Photoshop做出符合杂志要求的WB图片!...
  9. python数据挖掘实验报告1
  10. android中页面自动跳转,【学习笔记-安卓开发】8. Android Studio如何实现页面自动跳转(安卓学习系列博客)...