`

(转)php安装模式mod_php和Fastcgi的选择与对比

 
阅读更多

转自——http://blog.csdn.net/21aspnet/article/details/3280512

 

安装php又面临到了模式的选择,以前都是选择mod_php模式,因为这样安装比较方便哈,今天突然关心起FastCGI这种模式,败毒了一把,找到了一些关于mod_php和Fastcgi的选择与对比这方面的讨论,现在发出来留一个记号,以便进一步研究:

第一篇:php在apache中安装模式的区别:fastcgi和mod_php

     说到fastCgi就不得不说Cgi。
     CGI英文全称是 Common Gateway Interface,通常翻译为共同网关接口,是HTTP服务器与机器上的其他程序进行通信的一个接口。这个“其他程序”可以使用任何计算机语言来编写,它通过CGI这个接口从HTTP服务器取得输入,然后把运行的结果又通过CGI这个接口交给HTTP服务器,而HTTP服务器把这个结果送给浏览器。

     CGI的出现让WEB从静态变为为动态,随着Web的越来越普及,很多的网站的都需要有动态的页面,以便与浏览者互交。CGI方式的缺点也越来越突出。因为HTTP要生成一个动态页面,系统就必须启动一个新的进程以运行CGI程序,不断地fork是一项很消耗时间和资源的工作。这就出现了FastCGI。

   百度百科关于FastCGI


 2. FastCGI 可在任何平台上使用,Netscape Enterprise 及 IIS 都有 FastCGI 的模块可供使用,阿帕契 (Apache,以及利用 Apache 衍生出做的服务器) 上也有 mod_fastcgi 可用。
 3. FastCGI 支持 C/C++,Ruby, Perl,Tcl,Java,Python 等程序语言。
 4. FastCGI 的应用程序亦兼容于 CGI。即 FastCGI 的应用程序也可以当成 CGI 来执行。
 5. 现有的 CGI 程序要改写成 FastCGI 非常简单,最少可能只需要多加入三行程序代码。
 6. FastCGI 的侦错方式与 CGI 大同小异,只要带入程序所需的环境变量及参数,即可在命令列模式执行或侦错。
 7. FastCGI 应用程序的写作方式与 CGI 类似,除了几项原则要特别注意外,FastCGI 的写作方式跟 CGI 几乎一样,与学习 Web Server API 比较起来, FastCGI 简单多了。
 8. FastCGI 支授分布式运算 (distributed computing),即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。

     mod_php就是把PHP做为APACHE一个内置模块。让apache http服务器本身能够支持PHP语言,不需要每一个请求就启动PHP解释器来解释PHP。

第二篇:mod_php or fastcgi性能比较与选择

用php肯定少了不这个问题的选择,cgi自然就不必说了,但是mod_php和fastcgi的争论确还是比较多的。
找了一些资料,晾在这,可供参考。
首先,性能应该是大家最关心的问题了,除了mod_php和fastcgi 的 benchmark,还有一些服务器差别的测试,如apache vs lighthttpd

mod_php, LightTPD, FastCGI - What’s fastest?
     这个bechmark的结果是 Apache(prefork)+Fastcgi+php的性能是最好的。超过了apache+mod_php,甚至也超过了lightty+fastcgi+php。当然,这个结果得出值相差都很小。另外,以上说的几个结果都使用了APC加速,使用APC后性能提高1倍以上。

php4-mod-vs-cgi
   这个bechmark是在php4的环境下完成的。其summary.txt的内容如下。


------------------------

PHP4 module, very simple script (phpinfo.php): requests/s
plain 130.04
+turckcache 129.42
+turckcache+zend-optimizer 125.50

PHP4 module, very complex script (insurance application): requests/s
plain 1.84
+turckcache 6.23
+turckcache+zend-optimizer 5.58
+optimizer 1.58

PHP4 CGI, very simple script (phpinfo.php): requests/s
plain 22.69
+turckcache n/a*
+turckcache+zend-optimizer n/a*
+optimizer 21.23

PHP4 CGI, very complex script (insurance application): requests/s
plain 2.00
+turckcache n/a*
+turckcache+zend-optimizer n/a*
+optimizer 1.72

* = turkcache doesn't support caching of the PHP scripts in CGI mode

上面的结果我觉得需要关注的是无cache的情况,因为使用mod_php或fastcgi主要还是用来生成动态页面。前面的cache有更好的工具来实现,如squid。所以,这个结果也是fastcgi胜出,相差也不大。

http://buytaert.net/drupal-performance?page=1
   这个文章的结果和上面两个刚好相反。使用fastcgi代替mod_php后,”When switching from

to

we observe a 63% slowdown for anonymous visitors, and a 18% slowdown for authenticated visitors.”以下是图表

 

另外,benchmark中也做了和lightty的比较,如下图:

 

这个文章的结论是Apache+mod_php性能好于Apache+fastcgi。另外,Apache+mod_php略好于lightty+fastcgi。

4 最后看看 fastcgi官方自己怎么说的吧
    Of course, the answer is that it depends upon the application. A more complete answer is that FastCGI often wins by a significant margin, and seldom loses by very much.

5 结论是,还是根据自己的应用测一下吧….

最后,个人观点
如果mod_php和fastcgi的性能相差不是很大的话,还是倾向于fastcgi的,这种方式毕竟更灵活、安全和简单。
1 使用fastcgi,你的web server 可以比较简单的切换,可以测试不同的服务器,Apache,lightty,ngix 等等,不需要有代码的修改
2 如果想换脚本的实现,如不用php,而是改成perl,python之类的,web服务器也不需要任何的改动
3 web server和fastcgi可以用不同的帐号运行,带来了一定的安全隔离
4 只在Apache中编个mod_fastcgi可以说是简单多了,把mod_php编进apache时,出问题时很难定位是php的问题还是apache的问题,我就见过这样的core,函数调用几十层,一点头绪都没有

分享到:
评论

相关推荐

    mod_php和mod_fastcgi和php-fpm的介绍,对比,和性能数据

    mod_php和mod_fastcgi和php-fpm的介绍,对比,和性能数据

    mod_php、FastCGI、PHP-FPM等PHP运行方式对比

    主要介绍了mod_php、FastCGI、PHP-FPM等PHP运行方式对比,本文讲解了什么是PHP处理器(PHP handlers)、mod_php的优缺点、FastCGI的优缺点、PHP-FPM(FastCGI Process Manager)的优缺点等内容,需要的朋友可以参考下

    (完整版)[好文]mod-php和mod-fastcgi和php-fpm的介绍-对比-和性能数据.doc

    (完整版)[好文]mod-php和mod-fastcgi和php-fpm的介绍-对比-和性能数据.doc

    mod_fcgid-2.3.9.tar.bz2

    Apache mod_fcgid 用于 Apache HTTP Server 的 FastCGI 模块作为 2.3.9 发布。

    Apache2.4 Win64位

    #----------------Fastcgi-------------------------------- LoadModule fcgid_module modules/mod_fcgid.so <IfModule mod_fcgid.c> FcgidMaxRequestsPerProcess 1000 FcgidMaxProcesses 15 FcgidIOTimeout 600 ...

    ubuntu 同时装php5.3和5.2

    项目中要用到zend Optimizer,但是目前只支持php5.2,Ubuntu默认安装的php版本为5.3,找了好多 方法,终于借助下面这篇文章的方法成功的安装了5.2及5.3两个版本的php Although Drupals 7+ run smoothly on PHP 5.3, ...

    CentOS下与Apache连接的PHP多版本共存方案实现详解

    在apache下整合fastCGI模式运行的php-fpm,似乎网上很少相关材料,就连英文版材料也少。只要是php-fpm,基本上都是与nginx搭配。查了一大批相关资料,写本文总结一下。 apache下有多个fastCGI的支持方案:至少有mod_...

    php.ini-development

    CGI/FastCGI. ; http://php.net/ini.sections ; Directives are specified using the following syntax: ; directive = value ; Directive names are *case sensitive* - foo=bar is different from FOO=bar. ; ...

    PHP fastcgi模式上传大文件(大约有300多K)报错

    最近在项目中中上传图片时,大约有...如果你只需要修改单个虚拟主机的 MaxRequestLen,原来是fastcgi模式下的设置问题,需要在配置文件.htaccess或者直接在apache的配置文件http.conf 中指明,如下: 代码如下 复制代

    Linux上配置Nginx+PHP5(FastCGI)

    Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,以事件驱动的方式编写,所以有非常好的性能...其拥有 匹配Lighttpd的性能,同时还没有Lighttpd的内存泄漏问题,而且Lighttpd的mod_proxy也有一些问题并且很久没有更新。

    PHP编写daemon process 实例详解

    PHP编写daemon process 今天下午在segmentfault.com看到一个...php core本身和web没有任何耦合,php通过sapi与其它应用程序通信,例如mod_php就是为apache编写的sapi实现,同样,fpm是一个基于fastcgi协议的sapi实现

    PHP编写daemon process详解及实例代码

    今天下午在segmentfault.com看到...php core本身和web没有任何耦合,php通过sapi与其它应用程序通信,例如mod_php就是为apache编写的sapi实现,同样,fpm是一个基于fastcgi协议的sapi实现,这些sapi都是与web server配

    Linux下从零开始安装配置Nginx服务器+PHP开发环境

    其拥有匹配Lighttpd的性能,同时还没有Lighttpd的内存泄漏问题,而且Lighttpd的mod_proxy也有一些问题并且很久没有更新。 因此我打算用其替代Apache应用于Linux服务器上。但是Nginx并不支持cgi方式运行,原因是可以...

    ansible-apache2-pagespeed

    Webhop-Apache2 + Pagespeed Ansible角色在基于ubuntu的主机上安装apache2和google pagespeed模块的最新版本的角色。要求该角色假定要配置的默认站点是使用fastcgi模块的基于PHP的站点角色变量默认值...

    由Apache 500错误引出的临时文件问题分析解决

    查看apache日志,发觉是mod_fcgid模块异常,提示”Connection reset by peer:mod_fcgid:error reading data from FastCGI server”、”Premature end of script headers:index.php”、”process /usr/… apache/cgi-...

    minestat:Minecraft服务器状态检查器

    MineStat已移植到多种语言,可与ASP.NET,FastCGI,mod_perl,mod_php,mod_python,Node.js,Rails,Tomcat等结合使用。 如果您打算在共享的Web主机上托管MineStat,请确保提供程序允许出站套接字。 C#示例 ...

    Ansible-WebServer:用于一台或多台Web服务器(Nginx(前端)+ Apache(后端))的全自动部署的Playbook

    mod_fastcgi mod_remoteip PHP-FPM 玛丽亚数据库 phpMyAdmin(可选) 敲门(可选) SFTP服务器(可选) 防火墙(可选) UFW 防火墙 怎样做才能提高安全性? 隐藏Nginx和Apache版本 禁止访问A

    PHPSGI服务器Funk.zip

    支持通过 PHP SAPI (Apache2 mod_php, php-fpm, fastcgi) 实现的服务器,因此你可以使用 Funk 来集成你的应用以切换到不同的 HTTP 服务器实现。组件:HTTP server (with event extension or socket_select)SAPI ...

    nginx-ssl-variables:用于访问 nginx 中标准(Apache 兼容)SSL 变量的配置

    nginx SSL 变量与 Apache mod_ssl 模块相比,这会在 nginx 中创建向后兼容的 SSL 变量; 访问 SSL 客户端证书特别有趣。 一些变量由 nginx 提供,其他一些变量必须通过带有 Lua-OpenSSL 接口的 nginx-Lua 计算。 ...

Global site tag (gtag.js) - Google Analytics