[转]php 在各种web服务器的运行模式

一、phpapache中运行模式

php在apache中一共有三种工作方式:CGI模式、FastCGI模式、Apache 模块DLL)

以下分别比较:

1. CGI模式与模块模式比较:

php在apache中两种工作方式的区别(CGI模式、Apache 模块DLL)
这两种工作方式的安装:

PHP 在 Apache 2.0 中的 CGI 方式
ScriptAlias /php/ "c:/php/"
AddType application/x-httpd-php .php

# 对 PHP 4 用这行
Action application/x-httpd-php "/php/php.exe"

# 对 PHP 5 用这行
Action application/x-httpd-php "/php/php-cgi.exe"
PHP 在 Apache 2.0 中的模块方式
# 对 PHP 4 用这两行:
LoadModule php4_module "c:/php/php4apache2.dll"
# 别忘了从 sapi 目录中把 php4apache2.dll 拷贝出来!
AddType application/x-httpd-php .php
# 对 PHP 5 用这两行:
LoadModule php5_module "c:/php/php5apache2.dll"
AddType application/x-httpd-php .php

# 配置 php.ini 的路径
PHPIniDir "C:/php"

这两种工作方式的区别:
在CGI模式下,如果客户机请求一个php文件,Web服务器就调用php.exe去解释这个文件,然后再把解释的结果以网页的形式返回给客户机;
而在模块化(DLL)中,PHP是与Web服务器一起启动并运行的。
所以从某种角度上来说,以apache模块方式安装的 PHP4有着比CGI模式更好的安全性以及更好的执行效率和速度。

2. FastCGI运行模式分析:

FastCGI的工作原理是:

(1)、Web Server 启动时载入FastCGI进程管理器【PHP的FastCGI进程管理器是PHP-FPM(php-FastCGI Process Manager)】(IIS ISAPI或Apache Module);
(2)、FastCGI进程管理器自身初始化,启动多个CGI解释器进程 (在任务管理器中可见多个php-cgi.exe)并等待来自Web Server的连接。
(3)、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi.exe。 
(4)、FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在 WebServer中)的下一个连接。 在正常的CGI模式中,php-cgi.exe在此便退出了。

在上述情况中,你可以想象 CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部dll扩展并重初始化全部数据结构。使用FastCGI,所有这些 都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。

3. 为什么要使用FastCGI,而不是多线程CGI解释器?
这可能出于多方面的考虑,例如:
(1)、你无论如何也不能在windows平台上稳定的使用多线程CGI解释器,无论是IIS ISAPI方式还是APACHE Module方式,它们总是运行一段时间就崩溃了。奇怪么?但是确实存在这样的情况!
当然,也有很多时候你能够稳定的使用多线程CGI解释器,但是,你有可能发现网页有时候会出现错误,无论如何也找不到原因,而换用FastCGI方式时这种错误的概率会大大的降低。我也不清楚这是为什么,我想独立地址空间的CGI解释器可能终究比共享地址空间的形式来得稳定一点点。
(2)、性能!性能?可能么,难道FastCGI比多线程CGI解释器更快?但有时候确实是这样,只有测试一下你的网站,才能最后下结论。原因嘛,我觉得很难讲,但有资料说在Zend WinEnabler的时代,Zend原来也是建议在Windows平台下使用FastCGI而不是IIS ISAPI或Apache Module,不过现在Zend已经不做这个产品了。

 

4. FastCGI 模式运行PHP 的优点:

以 FastCGI 模式运行 PHP 有几个主要的好处。首先就是 PHP 出错的时候不会搞垮 Apache,只是 PHP 自己的进程当掉(但 FastCGI 会立即重新启动一个新 PHP 进程来代替当掉的进程)。其次 FastCGI 模式运行 PHP 比 ISAPI 模式性能更好(我本来用 ApacheBench 进行了测试,但忘了保存结果,大家有兴趣可以自己测试)。

最后,就是可以同时运行 PHP5 和 PHP4。参考下面的配置文件,分别建立了两个虚拟主机,其中一个使用 PHP5,另一个使用 PHP4。

LoadModule fastcgi_module modules/mod_fastcgi-2.4.2-AP13.dll

ScriptAlias /fcgi-php5/ "d:/usr/local/php-5.0.4/"

FastCgiServer "d:/usr/local/php-5.0.4/php-cgi.exe" -processes 3

ScriptAlias /fcgi-php4/ "d:/usr/local/php-4.3.11/"

FastCgiServer "d:/usr/local/php-4.3.11/php.exe"

Listen 80

NameVirtualHost *:80

DocumentRoot d:/www

Options Indexes FollowSymlinks MultiViews

ServerName php5.localhost

AddType application/x-httpd-fastphp5 .php

Action application/x-httpd-fastphp5 "/fcgi-php5/php-cgi.exe"

IndexOptions FancyIndexing FoldersFirst

Options Indexes FollowSymLinks MultiViews

AllowOverride None

Order allow,deny

Allow from all

Listen 8080

NameVirtualHost *:8080

DocumentRoot d:/www

Options Indexes FollowSymlinks MultiViews

ServerName php4.localhost

AddType application/x-httpd-fastphp4 .php

Action application/x-httpd-fastphp4 "/fcgi-php4/php.exe"

Options Indexes FollowSymLinks MultiViews

AllowOverride None

Order allow,deny

Allow from all

使用上面的配置,访问 http://localhost/ 就使用 PHP5,而访问 http://localhost:8080/ 就使用 PHP4。所以只要合理配置,就可以让不同的虚拟主机使用不同版本的 PHP。

FastCGI 模式的一些缺点:

说完了好处,也来说说缺点。从我的实际使用来看,用 FastCGI 模式更适合生产环境的服务器。但对于开发用机器来说就不太合适。因为当使用 Zend Studio 调试程序时,由于 FastCGI 会认为 PHP 进程超时,从而在页面返回 500 错误。这一点让人非常恼火,所以我在开发机器上还是换回了 ISAPI模式。

最后,在 Windows 中以 FastCGI 模式存在潜在的安

php nginx 中运行模式(nginx+PHP-FPM )目前理想选择

使用FastCGI方式现在常见的有两种stack:ligthttpd+spawn-fcgi; 另外一种是nginx+PHP-FPM(也可以用spawn-fcgi) 。

(1) 如上面所说该两种结构都采用FastCGI对PHP支持,因此HTTPServer完全解放出来,可以更好地进行响应和并发处理。因此lighttpd和nginx都有small, but powerful和efficient的美誉。

(2) 该两者还可以分出一个好坏来,spawn-fcgi由于是lighttpd的一部分,因此安装了lighttpd一般就会使用spawn-fcgi对php支持,但是目前有用户说ligttpd的spwan-fcgi在高并发访问的时候,会出现上面说的内存泄漏甚至自动重启fastcgi。即:PHP脚本处理器当机,这个时候如果用户访问的话,可能就会出现白页(即PHP不能被解析或者出错)。

另一个:首先nginx不像lighttpd本身含带了fastcgi(spawn-fcgi),因此它完全是轻量级的,必须借助第三方的FastCGI处理器才可以对PHP进行解析,因此其实这样看来nginx是非常灵活的,它可以和任何第三方提供解析的处理器实现连接从而实现对PHP的解析(在nginx.conf中很容易设置)。

nginx可以使用spwan-fcgi(需要一同安装lighttpd,但是需要为nginx避开端口,一些较早的blog有这方面安装的教程),但是由于spawn-fcgi具有上面所述的用户逐渐发现的缺陷,现在慢慢减少使用nginx+spawn-fcgi组合了。

c. 由于spawn-fcgi的缺陷,现在出现了新的第三方(目前还是,听说正在努力不久将来加入到PHP core中)的PHP的FastCGI处理器,叫做PHP-FPM(具体可以google)。它和spawn-fcgi比较起来有如下优点:

由于它是作为PHP的patch补丁来开发的,安装的时候需要和php源码一起编译,也就是说编译到php core中了,因此在性能方面要优秀一些;

同时它在处理高并发方面也优于spawn-fcgi,至少不会自动重启fastcgi处理器。具体采用的算法和设计可以google了解。

因此,如上所说由于nginx的轻量和灵活性,因此目前性能优越,越来越多人逐渐使用这个组合:nginx+PHP/PHP-FPM

三、IIS+ ISAPI模式

这种模式适合开发环境中, 生产环境中用的较少。

四、总结

目前在HTTPServer这块基本可以看到有三种stack比较流行:

(1)Apache+mod_php5
(2)lighttp+spawn-fcgi
(3)nginx+PHP-FPM

三者后两者性能可能稍优,但是Apache由于有丰富的模块和功能,目前来说仍旧是老大。有人测试nginx+PHP-FPM在高并发情况下可能会达到Apache+mod_php5的5~10倍,现在nginx+PHP-FPM使用的人越来越多。

转自:http://www.cnblogs.com/jhg123/archive/2011/06/02/2068621.html

时间: 2024-10-05 05:31:56

[转]php 在各种web服务器的运行模式的相关文章

Java中常见的5种WEB服务器介绍

这篇文章主要介绍了Java中常见的5种WEB服务器介绍,它们分别是Tomcat.Resin.JBoss.WebSphere.WebLogic,需要的朋友可以参考下 Web服务器是运行及发布Web应用的容器,只有将开发的Web项目放置到该容器中,才能使网络中的所有用户通过浏览器进行访问.开发Java Web应用所采用的服务器主要是与JSP/Servlet兼容的Web服务器,比较常用的有Tomcat.Resin.JBoss.WebSphere 和 WebLogic 等,下面将分别进行介绍. Tomc

Web服务器开发

服务器是C/S模式的核心,最近在看网络编程的东西,参考了一些书籍,做了一个Web服务器.整体的实现分为四个部分:界面控制.服务流程的实现.HTTP协议的实现.协议的辅助实现部分. 界面控制部分 主窗体设计比较简陋, Web服务器的运行离不开HTTP协议,定义一个类CHttpProtocol,用来实现HTTP协议. class CHttpProtocol { public: HWND m_hwndDlg; SOCKET m_listenSocket; map<CString, char *> m

从零开始搭建论坛(一):Web服务器与Web框架

之前用 Django 做过一个小的站点,感觉Django太过笨重,于是就准备换一个比较轻量级的 Web 框架来玩玩.Web.py 作者已经挂掉,项目好久没有更新,所以不准备用它.而 Flask 也是一个成熟的轻量级 Web 框架,在 github 上有众多的 Star 和 Fork,文档和扩展也很丰富,值得学习. 学习一个框架最好的方式就是用框架做一个项目,在实战中理解掌握框架.这里我用 Flask 框架,使用 Mysql 数据库做了一个论坛系统.麻雀虽小,五脏俱全,论坛效果图如下: 下面是论坛

【转载】如何在 Ubuntu 15.04/CentOS 7 中安装 Lighttpd Web 服务器

Lighttpd 是一款开源 Web 服务器软件.Lighttpd 安全快速,符合行业标准,适配性强并且针对高配置环境进行了优化.相对于其它的 Web 服务器而言,Lighttpd 占用内存更少:因其对 CPU 占用小和对处理速度的优化而在效率和速度方面从众多 Web 服务器中脱颖而出.而 Lighttpd 诸如 FastCGI.CGI.认证.输出压缩.URL 重写等高级功能更是那些面临性能压力的服务器的福音. 以下便是我们在运行 Ubuntu 15.04 或 CentOS 7 Linux 发行

在 Linux 中安装 Lighttpd Web 服务器

Lighttpd 是一款开源 Web 服务器软件.Lighttpd 安全快速,符合行业标准,适配性强并且针对高配置环境进行了优化.相对于其它的 Web 服务器而言,Lighttpd 占用内存更少:因其对 CPU 占用小和对处理速度的优化而在效率和速度方面从众多 Web 服务器中脱颖而出.而 Lighttpd 诸如 FastCGI.CGI.认证.输出压缩.URL 重写等高级功能更是那些面临性能压力的服务器的福音. 以下是我们在运行 Ubuntu 15.04 或 CentOS 7 Linux 发行版

web服务器/cgi/html/css/js

随着Internet技术的兴起,在嵌入式设备的管理与交互中,基于Web方式的应用成为目前的主流,这种程序结构也就是大家非常熟悉的B/S架构,即在嵌入式设备上运行一个支持脚本或CGI功能的Web服务器,能够生成动态页面,在用户端只需要通过Web浏览器就可以对嵌入式设备进行管理和监控,非常方便实用.本节主要介绍这种应用的开发和移植工作. Web 典型的嵌入式Web服务器有Boa (www.boa.org)和thttpd (http://www.acme.com/software/thttpd/)等,

web容器 web服务器 servlet/jsp容器 之间的区别和关系是什么?

web容器 web服务器 servlet/jsp容器 之间的区别和关系是什么? 这是我在网上找的一些资料:1. Web浏览器除了可以在本地硬盘上打开网页文档外,还可以使用http网络协议从网络上的Web服务器(也叫www服务器)上获取网页文档的内容. 2. Web浏览器与Web服务器分别代表着TCP网络程序的客户机和服务器. 3. 无论网站规模的大小,最起码的工作就是要在用做Web服务器的计算机上安装某种Web服务器软件.只要在一台计算机上安装了Web服务器软件,从功能上讲,这台计算机就可以成为

常用/常见Java Web 服务器/应用服务器介绍

常用/常见应用服务器介绍:自己总结.整理一些常见的应用服务器,资料主要来源于网上. 常用Java Web 服务器Java Web应用程序需要部署在Java web服务器中运行,常用的Java Web服务器有Tomcat.GlassFish.WebLogic.JBoss.WebSphere.Jetty.JRun等. Apache Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使

Web服务器访问失败故障处理技巧

很多公司都架设了Web服务器,不过架设好的Web服务器如果不经过访问测试,很可能无法达到顺利发布信息的目的:小编下面推荐的一则Web服务器访问失败故障就比较常见,现在我们就对它的排除过程进行总结,希望日后大家再次遭遇相同类型故障时可以快速进行应对!这些经验都是客户租用服务器的案例. 租用服务器|托管服务器|私服服务器租用|高防服务器|网站服务器租用|双线服务器租用|湖南双线|衡阳双线高防 为了能让单位员工及时了解上级指示精神以及单位通知和其他信息,单位领导决定在局域网中搭建Web服务器,保证局域