长期以来,Apache和Microsoft的IIS一直统治着Web服务器市场最大的份额。虽然在Netcraft和Security Space每月的调查中,Apache是不容置疑的获胜者,但IIS却在财富1000企业中占据着支配性的优势。显然,两者都是不错的选择,但每一种服务器都有各自的优点和缺点。
鉴于Apache 2.0正式版已经于2002年中期发布,IIS 6.0也在今年上半年正式发行,现在应该是比较这两种服务器、了解它们各自特点和适用对象的时候了。
一、基本面
从Windows NT 4.0时代开始,IIS就是Windows服务器操作系统的一个可选组件。当时,IIS还只是一个仅有基本功能的Web服务器,版本是3.0。随后,就在Windows NT 4.0正式发行后不久,一个可选的升级补丁包带来了IIS 4.0,IIS 4.0是第一个真正被当作Web服务器平台广泛使用的IIS。
Windows 2000的服务器版、桌面版都带有IIS 5.0,IIS 5.0的升级版即IIS 5.1则集成到了Windows XP中。但是,IIS 4和IIS 5之间的变化其实并不大。
Windows Server 2003引入了最新的IIS 6.0。和以前的版本相比,IIS 6.0几乎已经彻底改写,它支持新型的执行模式,具有更好的可管理性,而且性能也有了显著的提高。
相比之下,Apache的历史更丰富。Apache最初建立在httpd代码的基础上,一些人相信正是它启动了最初的Web革命。直到2002年,Apache最主要的生产版本仍是1.3.x,它基本上是一个面向Unix的产品,但加入了许多开发技巧,使它能够在许多其他操作系统上运行,包括Windows系统。
Apache 2.0的正式版(即生产版)于2002年面市,新的版本引入了一个全新的执行环境,它成功地分离了Apache系统的核心功能和支持、处理请求的系统。Apache 2.0广泛支持各类操作系统,包括所有版本的Windows、Linux、Unix以及Mac OS X,还有其他一些非主流的操作系统,诸如BeOS和VMS。
二、执行环境
IIS和Apache的运行方式存在很大的差异,两者各有许多优点和缺点。IIS显然只为Windows平台设计,只能用于Windows平台,特别地,目前IIS 6.0唯一的运行平台只有Windows Server 2003。虽然IIS的这一特点限制了基于IIS的Web服务可能部署的平台范围,但同时也带来一些优势,包括与宿主操作系统更深入地集成,便于通过大量标准的操作系统工具管理和控制Web服务器。
在IIS 6.0中,操作系统与Web服务器之间的集成比以往更深入了,原来接受和处理客户请求的组件现在分离成了两个组件,内核模式的请求监听器http.sys监听并接受来自客户端的请求,把请求放入一个或者多个请求队列;随后,IIS处理队列中的请求,利用一个或多个工作进程来控制各个请求和应用程序的运行。
由于分离了接收请求和处理请求的组件,即使工作进程由于某种故障而不再运行,Web服务器仍能接收请求;同时,这种分离也方便了对处理请求的工作进程的控制。因此,出现应用程序故障或外部故障时,管理员(或者服务器,自动执行)能够回收请求并予以恢复――如果这种情况发生在以前,那就需要关闭/重新启动IIS、Web服务,甚至某些极端情况下,需要重新启动整个服务器。
与Apache以前的版本相比,Apache 2.0已经作了重大的修改。其中最重要的更动之一是,这个Web服务器现在已经可以直接在许多平台(包括Windows)上运行了。重新设计之后,Apache 2.0对范围广泛的操作系统提供了更高效的支持,例如包含了专门面向Unix和Windows的执行模块,使得Web服务器能够更充分地利用底层操作系统。
Apache 2.0系统的核心是一个APR(Apache Portable Runtime,即Apache可移植运行环境),它使得Apache内核能够在几乎所有带有C编译器的系统上运行。一系列多处理器模块(multi-processor module,简称MPM)担负着实际接收和处理请求的任务。在Unix下,它可以是传统的fork模式,也可以是新型的多线程模式――利用当前大多数操作系统内置的线程支持。例如在Windows下,它也可以使用多线程模式,从某些方面来看,类似IIS 6.0之中工作进程使用的多线程模式。
特性 | IIS | Apache |
独立的请求处理机制 | 是 | 是(有限) |
MPM | 是 | 是 |
线程支持 | 是 | 是(在适当的操作系统上) |
三、动态组件
在IIS中,开发动态应用的主要工具是ASP,ASP实际上是一种允许将代码嵌入到HTML页面的解决方案的统称。服务器根据客户端的请求解析ASP页面,将ASP页面生成的HTML结果发回到客户端。ASP系统允许开发者使用各种编程语言,包括Visual Basic、VBScript、javascript、Java和C/C++,还有各种源代码开放的编程语言,诸如Perl和Python。另外,IIS继续支持传统的CGI应用开发方式,还有以ISAPI筛选器为特征的IIS特有的筛选、执行系统。
Apache的设计目标也是支持多种编程语言,或者通过CGI模式执行,或者直接将语言解释器嵌入到Apache环境然后以动态模块调用的形式执行,对于用PHP、Perl和Python之类语言编写的动态组件,这种处理方式显著地提到了性能。
这两种系统都支持JSP模型,而且大多数JSP应用程序只要很少的修改就可以在两种平台之间迁移。其他一些语言也相似,但效果各不相同,例如只要安装了ChilliSoft ASP组件(www.chillisoft.com),Unix平台也同样能够支持ASP。
当前,Unix还不能支持的一项特性是Microsoft.NET环境。IIS 6.0和Windows Server 2003不仅大量地应用了.NET框架技术,而且已经与.NET框架紧密结合。
特性 | IIS | Apache |
ASP | 是 | 使用ChilliSoft ASP |
CGI | 是 | 是 |
Perl | 是 | 是 |
Python | 是 | 是 |
PHP | 是 | 是 |
JSP | 是 | 是 |
集成.NET支持 | 是 | 否 |
四、安全和验证
IIS因其与操作系统的紧密结合而获益良多,Windows中配置、管理和验证用户的系统同时也为IIS服务器提供了安全和验证服务,由于只需要管理一个安全系统,管理负担大大减轻。同时,在适当的配置下,用户只要登录到Windows,就可以同时通过Intranet自动登录到IIS服务器上的应用。
由于整个操作系统以及IIS服务器都使用同一个身份验证系统,所以分配Web网站所在文件系统的访问权限也很方便。例如,当用户登录到Web应用,他访问网站各个目录的权限也已经由用户和组的授权情况决定。
相比之下,Apache的安全和管理系统不象IIS那样与操作系统紧密结合在一起。虽然有一些模块和适配器能够支持各种不同的验证和安全资源,包括活动目录(Active Directory)、Unix密码文件、LDAP服务器,但从整体上看,Apache服务器与它所支持的操作系统的分离程度比较大。例如,当用户身份用Unix密码文件验证时,Apache仍会忽略底层文件系统上设置的文件权限。
从通信安全的角度来看,两种Web服务器都支持SSL加密技术,允许使用IPSec技术。
特性 | IIS | Apache |
安全登录 | 是 | 是 |
SSL | 是 | 是 |
基本验证 | 是 | 是 |
摘要验证 | 是 | 是 |
LDAP验证 | 是 | 是,需要第三方模块的支持 |
活动目录验证 | 是 | 是,需要第三方模块的支持 |
Passport验证 | 是 | 否 |
五、性能
性能评测向来很困难,因为不管待评测的系统是多么相似,配置方面稍作改动,性能就可能发生极大地变化。虽然在同样的硬件上一律采用默认设置也能评出一个“优胜者”,但这不能反映出被评测系统真正的性能。同样地,我们还可以配置出这样的一个IIS服务器和一个Apache服务器,或者使其具有优异的性能,或者使其具有低劣的性能,但仍不能获得真正有价值的性能评比结果。
因此,一种更好的办法也许是分析各个系统的性能潜力。IIS集成了大量改善性能的特性,在多处理器系统上工作进程模式显著地提高了性能,ASP和ISAPI扩展使得应用程序能够从处理请求的进程直接运行。另外,以内核模式运行的http.sys也能够从缓冲区或磁盘将静态内容或简单的动态内容直接提供给客户端,避免了将请求转发给工作进程的开销。
Apache同样也有类似的功能。Apache能够缓冲许多信息,mod_perl和mod_php之类的工具使得动态页面和模板页面的执行速度几乎达到了静态页面的水平。这些模块类似于IIS环境中的ASP和ISAPI筛选器,直接把解释器嵌入到了Apache执行环境之中,避免了调用外部应用程序的开销,极大地提高了性能。
特性 | IIS | Apache |
内存缓冲 | 是 | 是 |
磁盘缓冲 | 是 | 否 |
内建的执行支持 | 是,需要合适的ISAPI筛选器 | 是,需要合适的模块 |
带缓冲的执行支持 | 是,需要ASP/ASP.NET | 是,需要mod_perl等模块 |
六、管理
两种Web服务器系统在管理方面的差别很大。管理Apache的主要途径是编辑文本格式的配置文件,虽然有许多命令行工具、Web工具和GUI界面的工具可供选用,但它们实际上都依赖于文本配置文件来更新配置信息。例如,Comanche就为Apache系统提供了一个完善的管理界面。gui.apache.org提供了各种工具的清单。
用文本文件提供配置信息有其优点,例如很容易在多台机器之间实现配置信息共享,可以方便地将配置信息从一个文件复制到另一个配置文件。当然缺点也有,例如配置文件比较容易损坏。如果不进行“软”重启,Apache不能使用修改后的配置信息,所以在重新启动Apache之前,管理员必须确保配置信息确实有效,这可以借助内建的测试机制来完成。
相比之下,IIS提供的系统配置工具就要丰富多了。虽然底层的配置信息主要保存在XML格式的文本文件之中,但IIS允许管理员在系统运行的时候修改配置和底层的文件。由于配置文件是XML格式,结构要比普通文本文件严格得多,同时又有足够的灵活性支持各种不同的配置需要。为便于远程支持,Windows Server 2003还集成了一个telnet服务器,使得管理员能够利用各种命令行工具远程管理服务器。
在IIS众多的配置编辑工具中,比较常用的包括一个微软管理控制台的管理单元,一个Web方式的管理系统,还有添加、更新和配置各种组件的一组命令行工具。管理员可以随时手工编辑XML文件,IIS服务器将立即自动反映出修改后的配置,不需要重新启动。另外,XML配置文件也很容易移植,方便了多台机器之间的配置信息共享。
IIS的MMC管理单元为网络上的多台服务器提供了一个一致的、分布式的管理界面,不过,在Apache这边,Webmin之类基于Web的管理工具,或者Comanche之类的专用GUI工具,也具有同样的功能。
特性 | IIS | Apache |
文本格式的配置文件 | 是,XML文件 | 是 |
命令行管理 | 是 | 有限 |
远程命令行管理接口 | 是 | 是 |
基于Web的管理 | 是 | 是,通过Webmin等工具 |
图形用户界面的管理工具 | 是 | 是,通过Comanche等工具。 |
七、可靠性
在比较IIS和Apache的过程中,可靠性也许是争议最大的一个项目了。根据资料,两种服务器最新版本之间的差异很小,在实验室里,一个Windows Server 2003系统从2003年1月开始运行一个Web网站――到现在已经有8个多月了,期间安装了各种必要的更新软件,但没有重新启动服务器;作为对比,旁边的一个Apache/Solaris系统已经运行了335天,也没有出现问题。
在IIS 6.0中,大部分的请求通常由工作进程处理,IIS 6.0为工作进程提供了大量的管理和控制机制。为了提高可靠性,IIS可以隔离各个应用程序,让应用程序运行在各自独立的内存和执行空间之中,或者与其他应用程序共享执行空间。这意味着,如果一个应用程序出了问题,最多只影响到当前的工作进程,但不会影响到其他工作进程及其运行的应用程序,也不会影响到处理请求的内核。
在进程和线程管理方面,Apache的许多操作都是自动的,但内存和应用程序的隔离问题仍旧存在,尚未提出有效的解决办法。Apache通过自动回收组件机制解决了一部分问题,即使某个组件出现了严重问题时内核仍会继续运行。不过,有时仍不免出现必须重新启动整个Apache服务器的情况。其中一个例子就是对Apache服务器本身进行配置之时,一般都需要重新启动。但是,对于IIS服务器上运行的Web网站,绝大多数对服务器本身的更新和改进不会影响用户访问,因为配置修改可以在服务器运行的同时进行。
特性 | IIS | Apache |
进程/线程管理 | 是 | 是 |
隔离应用程序 | 是 | 有限 |
运行时修改配置 | 是 | 否 |
八、结束语
虽然这两种服务器之间有着许多不同之处,但真正的选择往往要根据企业的需要而定,有时甚至由个人的爱好和需要决定。例如,许多开发者偏爱使用Unix和Apache环境下的Perl,尽管Perl和Apache同样可以在Windows上运行,IIS也支持Perl,但这些因素仍旧不能影响这类开发者的选择。
如果服务器管理问题是首要的考虑因素,IIS丰富的管理工具应当是最佳选择,同时IIS在安全机制、活动目录集成及其带来的安全管理方面的优势也很重要。
当然,部署费用也是一个不可忽视的重要因素。Apache是完全免费的,而且可以安装到Linux之类的免费操作系统上。IIS 6.0现在只能在Windows Server 2003上运行。虽然Windows Server 2003的Web版要比标准版便宜许多,但与Apache相比就显得很昂贵了――至少从表面上看是这样的。
新闻热点
疑难解答
图片精选