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