fancy1921 发表于 2011-12-21 08:44

cgi fastcgi php-cgi php-fpm php spawn-php 说清楚咯

<DIV><FONT size=2>上面的几个词语表面极其相似,但是实际几者是不同的,借用一句话“就像大熊猫与小熊猫的区别”</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>cgi(common gateway interface)通用网关接口,是早期实现动态网页的一种技术,cgi程序,也即cgi进程可以运行在本机,也可以运行在远端,与前段web通信的方法是通过pipe的形式,管道的形式,前段服务器的请求发给后端cgi是通过标准输入(standard input),cgi返回求求是通过标准输出(standard output),如果cgi返回标准错误(standard error),前段的web服务器就会记录错误,cgi在每次响应请求完成后自动退出,下次连接时在create,init</FONT></DIV>
<DIV><FONT size=2>cgi优点:</FONT></DIV>
<DIV><FONT size=2>1:简单易学</FONT></DIV>
<DIV><FONT size=2>2:支持多平台</FONT></DIV>
<DIV><FONT size=2>3:语言无关性,可以支持多种语言,php,perl,python,ruby等</FONT></DIV>
<DIV><FONT size=2>4:进程独立性</FONT></DIV>
<DIV><FONT size=2>cgi的缺点是:</FONT></DIV>
<DIV><FONT size=2>性能低下,如前面说的由于cgi的每次请求的fork,使cgi性能大打折扣,为了解决这个问题,就出现了下面说的两中技术</FONT></DIV>
<DIV><FONT size=2>1:server APIs</FONT></DIV>
<DIV><FONT size=2>这种技术是通过将app服务器的进程加载到前段的静态页面服务器的进程地址空间,通过共享内存大大提高了性能,但也有一些不足就是平台相关性,架构相关性(多线程,单线程的问题)。典型的应用就是lamp,搭建lamp环境时只用装php,apache,那么apache就能响应php请求,原因就是如此,此时的php更像一个动态链接库,apache把php的请求在启动时加载到httpd进程地址空间中,所以不需要配置什么cgi之类的</FONT></DIV>
<DIV><FONT size=2>2:fastcgi技术</FONT></DIV>
<DIV><FONT size=2>fastcgi就是一个内存中常驻的cgi,解决了cgi不断fork的问题,提高了响应速度,与前段的web服务链接通过一个多路复用的链接(一个链接可以发送多个请求),apache默认不支持,所以apache要想支持fastcgi需要第三方模块(mod_fastcgi),而nginx在这方面支持的很好,这也是为什么nginx能够很好的利用fastcgi的原因,注意nginx链接fastcgi的tcp链接还是暂时的,这也是nginx下面需要改进的地方</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>php-cgi,php-cgi就是fastcgi技术实现下的php进程,它的名字就叫php-cgi</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>下面说下php-fpm,spawn-php这都是php的管理器,及实现对php的管理,即实现对php-cgi进程的管理,启动,重启等,下面有一个简单的实验可以很清楚的说明这个问题</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>linux+nginx+fastcgi</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>关键一点在编译php时候的两个参数</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>为php打上fpm补丁</FONT></DIV>
<DIV><FONT size=2>gunzip -cd php-fpm-5.2.6 |patch -d&nbsp; php5.2.6 -p1</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>./configure</FONT></DIV>
<DIV><FONT size=2>--enable-fastcgi</FONT></DIV>
<DIV><FONT size=2>--enable-fpm</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>然后是配置下nginx即可</FONT></DIV>
页: [1]
查看完整版本: cgi fastcgi php-cgi php-fpm php spawn-php 说清楚咯