有时候apache给人的感觉是无处不在,每个人都在运行apache,甚至包括它们的狗也运行有自己的apache :)。但是即使如此,仍然有很多种其他的web服务器可供选择。本文就对目前市场上主流web服务器进行全面的比较。
web服务器
apache无处不在,可以运行在包括linux、soloris等多种系统平台之上。apache在网络市场是无可争议的领头羊。几乎在任何一本关于网络管理的教程中关于web服务器内容讨论的都是apache。当然选择apache是由很多非常充足的原因的,毕竟一千六百万用户(根据netcraft调查报告的统计数据)的选择不大可能是错误的。但是也没有必要一定去跟随潮流。web服务也许要多样性,gnu/linux的哲学就是更据自己的需要和实际情况选择适合自己的工具。
也许你的选择更多的注重于速度和可靠性,而不是哗众取宠。也许你仅仅是希望寻找一个干净、易于配置的web服务器。不管你的选择是什么,总是有很多的软件可以满足需求。在本文中,我们将对多种web服务器进行分析比较,提供给用户选择最适合自己的web服务器的依据。
编写一个基本的web服务器是非常简单的,仅仅需要监听合适的端口,建立连接,发送数据。编写这样的服务器一般和客户端的开发一般总是相辅相成地发展的,两者的诞生标志着www的开始。在九十年代浏览器、web服务器、html和http协议都得到了快速的发展。随后服务器变为由ncsa开发,相应的也变为ncsa web服务器。浏览器由mosaic变为netscape navigator。ncsa目前仍然可以得到,虽然它不再被维护和继续开发,但是仍然可以免费下载其源代码。其就是著名的web服务器apache的前身。
但是要进行这样的联系也需要一个客户端、一个协议和一个网络环境。但是当internet不断发展,web服务器需要更多的功能以满足客户端对更多动态内容的需求。apache已经发展出扩展模块方式来满足这种需求。但是当web服务成为很多商务应用都必须面对和采用的技术时,就出现了很多不同web服务器以满足这些不同的需求。可伸缩性,可靠性,速合和高级动态功能都是web服务器应该具有的关键因素,特别是在电子商务应用环境中。易于配置和管理对于新手来说也同样重要。
对于这些所有的特性来说并没有任何一个特定服务器能完全满足需求,但是如果你对自己的web服务的需求有明确的认识,那么在所有的web服务器中必然有一个能满足你的需求。
apache 1.3.19
apache仍然是最伟大的全能选手,也许它有些过于庞大、历史悠久,但是其优秀的性能和大量用户群,它应该会有更好的发展。就它灵活性和丰富的特性功能而言,apache相对于这里测试的其他web服务器来说可以说是web服务器的标准。除非你的在过去的四年里与这个世界相隔离,否则一定会看到大量的新闻文章欢呼apache的成功,并将其作为开放源码成功的典范。apache并不是采用gpl版权声明,而是采用自己的apache server版权声明,其强调自由地使用源代码。apache同样以“补丁服务器”而闻名,主要是因为早期apache的开发是通过对ncsa的httpd代码添加补丁程序来进行的。apache被看做是“补丁服务器”还因为它具有模块化特性,该特性实现了apache的灵活性和可扩展性,而且开发者可以利用该特性很容易地添加第三方功能模块,通过模块开发人员可以添加任何功能,模块是很多内容管理系统的功能基础,如midgard,zope等。
几乎所有的linux发布都安装apache作为默认配置。suse 7.1甚至预安装有包括各种高级模块选项的apache,如php3,mod_perl和ldap等等。用户会惊奇地发现系统安装成功就会有一个功能强大的web服务器可供选择。虽然安装apache并不是非常简单,但是如果有具有新的特性或安全补丁的apache发布,则下载源代码包并编译新的apache是值得的。apache不但具有庞大的用户群基础,并且有丰富的配置使用文档。
apache的主配置文件为纯文本格式的httpd.conf,随着apache版本的发展,其他一些配置文件则逐渐消亡,趋向于使用单一的配置文件httpd.conf来存放所有的配置指令,如客户访问信息、记录认证信息和虚拟服务器等等。apache配置选项采用的是指令模式,配置指令设定各种参数的值,例如:documentroot设置服务器web页面的根目录。你也可以灵活地设置多个基于ip或基于域名的虚拟web服务器,这些web虚拟服务器可以各自定义独立的documentroot配置指令。而loadmodule指令则用来指定加载不同的模块来实现对apache服务器功能的扩充。这些新功能大多是提供服务器端对脚本技术的支持,比如perl、php等。apache结合使用apachejserv可以实现对java servlets及jsp的支持。
apache的很多模块实现安全方面的防护:如mod_auth提供对对服务器上数据进行适当的保护,而ssl模块则用来保护服务器和客户端之间的通信安全。
对于大多数用户来说,手工编辑冗长的httpd.conf文件显得枯燥且易出错。幸运的是redhat中的linuxconf和webmin都提供了非常完善的apache配置模版。aapche的gui项目同样提供了comanche和mohawk来实现对apache图形方式配置和管理。这些工具都大大减少了管理和配置apache的难度,但是对httpd.conf一定理解对于配置高性能服务器来说是非常重要的。
很多地方都声明apache并不是最快的web服务器,apache的开发者的确是没有过多地考虑其开发一个超快的web服务器。而功能和稳定性则是考虑更多的因素。然而apache在很多负载很大的站点中运行非常正常,并没有得到过多的关于性能的抱怨。在我们使用webstone进行性能测试中,发现apache的吞吐量位居第一,并且出错最少。在测试中虽然apache的可扩展性不知最强,但是仍然是提供了如此多特性的服务器中速度最快的。
zeus webserver3.3.8 服务器
zeus是一个商业化的web服务器产品,最近它成为很多业界媒体中的头条新闻,因为有消息宣称zeus服务器的性能在2.4内核+smp环境下相对于2.2.x内核环境下性能提升了85%之多。速度永远是zeus服务器的卖点。常常有评论说如果希望对linux进行其作为服务器操作系统的性能测试,那么就运行zeus进行测试。
zeus服务器在smp环境下有优秀的可伸缩性,并实现了常见的特性集合,如访问控制、动态内容产生和安全等。它具有健壮、集成有集群支持的容错和负载平衡等特色,是高端应用的很好的选择。
zeus服务器的安装和管理相对比较简单。软件是以tar.gz格式的包格式,安装软件只需要解压软件包并运行一个安装脚本,在性能适当的机器上安装过程只需要几分钟。而且zeus服务器安装以后提供web方式的远程管理功能。
对zeus的管理分为两个部分:管理配置部分包含对管理服务器本身的配置和访问;而web配置部分则包含对web服务器的各方面特性的设置,从虚拟服务器设置到集群系统的管理及监控等等方面。默认情况下即使zeus仅仅运行一个服务器,其也被看做是一个虚拟服务器。和apache一样,多个虚拟服务器可以运行在同一台服务器上,同样虚拟服务器可以是“硬”(基于ip)或“软”(基于域名)虚拟服务器。
管理服务器的gui界面非常易于使用,可以轻易生成复杂的多虚拟服务器的配置。使用gui,不同虚拟服务器的设置可以相互克隆,可以建立集群系统,可以实现类似.htaccess的模块化配置。监控工具非常不错,具有对每个虚拟服务器和独立的集群节点的动态监控。
其功能可以与apache匹敌,包含易于实现的ssl安全特性和其他有用的特性,如带宽控制等等。zeus宣称支持php和java servlets。虽然易于使用的管理界面在某种程度上模糊了这些高级的配置特性。php4可以通过zeus支持的api方式(nsapi)来运行,也可以通过cgi发给你是来运行。但是很多用户报告这种api方式存在稳定性问题。
高端应用服务器的性能总是难以精确的测试,在负载相对较小情况下进行的测试,尽管很难给出在超负荷情况下服务器的运行情况,仍然具有一定的实用价值。在我们的测试中,zeus在服务器的吞吐量和响应时间上性能卓越,和apache一样它出错的概率也很少。zeus具有其它服务器所不具有的漂亮简洁的gui配置界面。据报道,zeus在四个处理器的linux系统下运行性能良好。要建立高性能的zeus服务器,相对其它服务器zeus显得略为有点繁琐。
iplanet enterprise edition 4.1
netscape公司为不同操作系统平台开发了多种web服务器,但到最近它才发布了自己在linux下的产品。曾经非常流行的netscape enterprise server现今被运行在linux下的同类产品iplanet enterprise edition所替代。iplanet是sun、netscape和aol公司联合生产的web产品,它被力图设计成高性能、跨平台的e-commerce产品。iplanet和其它netscape产品一样具有很高的性能,而且iplanet具有sun公司java的特性。
iplanet可以自由下载评估版使用,也可以购买正式版本。因为在压缩包中包含java的运行环境jre,所以iplanet的压缩包相对较大。压缩包被解压后,一个基于shell的简单安装工具可以帮助用户完成administration服务器和web服务器的安装。所有关于安装的信息都在这个时候输入,当然你也可以选择安装的选项,如选择安装java组件或者ldap目录,以便以后利用ldap管理用户和组。
就像现今流行的那样,iplanet也允许以浏览器方式管理和配置。administration服务器提供了全面的管理和监测功能,利用它可以重新配置administration服务器和web服务器。在集群节点iplanet服务器环境中,可以在一个administration服务器中利用群集数据库管理它们。
iplanet的多层菜单结构体现了iplanet丰富的功能,利用菜单选项可以实现web服务器的所有管理。iplanet具有非常有用的在线帮助文档和完整的ssl加密机制,这些特性保证用户登陆和现场检测的安全性。iplanet允许配置基于ip和名字的虚拟服务器。
现在web服务器和web应用程序服务器之间的界限变得越来越模糊,iplanet象其它专业web服务器一样也支持java api,以便提高自己的性能。enterprise edition 4.1本身内置jre,可以和大多数的数据库互联,它也支持jsp 1.1的api、serverlets 2.2的api和livewire。 它拥有功能强大的软件包,其功能远远超过了动态脚本语言。enterprise edition 4.1同时也支持传统的脚本方式,如cgi、nsapi,因而可以没有任何问题、方便的从其它产品迁移到iplanet。
iplanet具有现今高性能web服务器的特性,相对其它web服务器iplanet还提供更多的java功能。在webstone环境中测试,iplanet的性能非常良好。虽然iplanet有时会因服务器端未能响应客户端的请求而在客户端产生许多错误,但是它的吞吐量和响应时间性能卓越。作为一个昂贵的web服务器产品,希望能看到以webstone作为测试基准的更多的测试结果。如果你在寻找能够运行标准java api,并且在java api环境下运行速度良好的web服务器产品,iplanet当是你的首选。
aolserver 3.3.1
aolserver是一个多线程、可升级和扩展的web服务器。aolserver服务器使用简单而且功能强大的tcl作为其内嵌式的脚本语言和服务器端的api。就像名字所表明的那样,aolserver在aol公司的在线服务中得到了广泛应用,随着aol公司本身的发展,aolserver也增添了更多的特性,其速度也得到了显著提高。和其它大公司一样,aol公司也公布了aolserver的所有源代码。该源代码遵循aol公司自己的aolserver版权声明,同时aol公司也从此种开放式开发模型中获益。
aolserver的研究始于1994年,当时它作为完整的web发布系统的一部分进行开发。在该web发布系统中内嵌了web服务器的wysiwyg网页编辑器,该网页编辑器强调内容变化的便利性和内容更新的快捷性。恰如早期的html和www网一样,web发布系统被设计成一个完整的网页编辑系统。随着时间的推移,aol公司的网页编辑器已经不复存在,但是由于tcl脚本语言的出现和它对动态网页的支持,aolserver却生存了下来。
和apache相比,aolserver也支持源代码公开、性能也非常优异,它们都可以通过模块方式添加新的功能,但是aolserver却支持tcl语言,而且以不同的方式和数据库互连。aolserver可以连接和使用后台的关系型数据库(rdbms),例如oracle,postgresql等。aolserver在unix系统中作为单个进程运行,从而使得web服务器可以共享数据库连接,进而使得运行在aolserver中的脚本语言拥有更高的速度。aolserver的脚本语言也可以通过一个抽象层同时访问许多数据库管理系统。
aolserver可以免费从aol的官方网址或者它的开发站点sourceforge下载。只要把aolserver的压缩包解压,就可以非常简单的使用gmake编译和安装aolserver服务器、可选模块、tcl库、工具软件及其响应文档。用户可以使用config.tcl配置aolserver的环境。用户也可以如apache那样,安装和管理权限控制、cgi、ssl和数据库连接等模块。刚开始的时候,用户可能无法完全清楚、正确的安装和设置“软”(基于域名)虚拟服务器。aolserver的文档非常完整详细,但是有点略微繁琐。它包括了安装、配置的方方面面和tcl api的详细说明。但是aolserver并不支持基于http 1.1的软虚拟服务器。
用户可以在远程利用类似tclsh的模块管理aolserver,该模块运行在系统的指定端口。一旦运行该模块,通过telnet方式连接、管理aolserver或者利用监控模块执行tcl命令都是很简单的事情了。
在许多测试环境下,aolserver的表现并不能令人满意。在webstone环境测试aolserver,会出现许多错误,还有相当多的客户无法连接到aolserver服务器。虽然以上的问题会使人认为aolserver的性能很差,但是在负载相对较小情况下进行的测试结果并不能完全令人信服。
我们不能据此就认为aolserver不值得一用,因为利用webstone无法测试数据库的连接速度等其它参数,因而以上的测试结果仅供参考。尽管aolserver没有简洁的安装和配置工具,但是对那些需要较快数据库响应速度的客户,还是推荐使用该类产品。
roxen webserver 2.1.31
当说到适应动态网页内容这个问题时,我们又使用了模块k化这个名词。roxen服务器使用了一个服务器端的语言pike,利用pike既可以为roxen开发全新的模块,也可以嵌入到roxen系统中。pike是解释性语言,语法和c语言非常相似。因为pike是在以前写mud游戏的语言的基础上发展起来的,因而它在安全认证方面非常出色。pike无论从编程风格还是语法特点上都和c语言很接近,所以一个标准的c语言程序在很短的时间就可以改写成pike程序。作为一个解释语言,pike当然比编译性语言c的速度要慢,但是它的调试相对简单而且开发周期也很短。在roxen服务器环境下,使用pike语言生成动态网页内容,速度会有所提高。
在roxen中可以使用rxml语言生成动态网页内容。rxml是函数形式的服务器端xml脚本语言,它由roxen服务器解析并执行。roxen使用html方式的标签生成动态网页,标签可以由java或者pike生成。其实在roxen服务器环境中,几乎所有的工作都可以使用pike完成。
安装roxen非常的简单,只要使用下载的shell脚本就可以方便的解压所有必需的文件,并且设置管理接口和roxen服务器本身。在安装完java2,orcle和sysbase特制的脚本语言和推荐使用的内置升级系统后,roxen的所有特点就会渐渐显露出来,同时roxen也会安装pike的解释器和其它工具。
就象其它的web服务器一样,roxen也允许使用基于浏览器方式完成服务器配置工作。这种配置方式拥有流行的、简单的菜单系统,使用这些菜单可以设置系统的所有选项。roxen中也有丰富的帮助文件,这些文件涵括了roxen和pike的方方面面。通过模板或不使用模板生成一个新的站点都可以配置“硬”(基于ip)虚拟服务器。模板就是pike模块的基本列表,利用这些模板就可以设置roxen的不同功能。任何站点或者服务器必须设置和运行特定的模块,并使用它们管理站点的内容。一个站点必须包括文件系统模块和目录模块。利用文件系统模块可以设置文件的根目录,目录模块则管理索引文件和目录列表。在roxen系统中,用户可以根据需要检查每个模块的配置内容和安全性信息。
在任何roxen站点中都可以添加带宽控制、代理、中转服务等外来模块及兼容性、数据库连接、java、php4和perl语言的支持模块。
roxen管理服务器允许同时登陆管理和web服务,并对其进行全面监控。roxen还提供ssl安全机制。对于那些习惯apache系统的用户来说,安装roxen可能得费些功夫。但是一旦习惯了使用roxen-pike,你就会觉得roxen强大的功能也是颇令人喜欢的。
因为roxen允许使用外置模块,所以它的性能受这些模块的影响较大。在一个运行roxen的高端康柏proliant服务器中连接500个客户端,cpu的资源会全被占用,这样其它任务的性能就会降低。虽然在webstone环境的测试表明roxen的大多数参数指标比apache和zeus的要低,但是roxen的总体性能还是令人满意。那些希望把roxen作为高负载服务器使用的用户,建议再进行相关的测试,或者选取其它的测试工具。虽然roxen总体看起来很稳定,而且具有非常出色的pike和令人心动的外置模块功能,但是我们仍然建议用户把roxen看作一种有益的尝试。
jigsaw
你不可能再找到象jigsaw那样适应未来需要的web服务器了。它由www组织(w3c)开发,w3c组织负责研究和规定网络协议的标准(如http)。jigsaw 刚开始被设想成http 1.1的运行环境。它使用java语言开发,是成功的面向对象、功能全面的服务器。因为jigsaw不受测试平台的限制,所以jigsaw是一个具有活力的、拥有无限潜能的优秀web服务器。
jigsaw使用java作为开发语言,因而它可以方便地在所有支持java的平台上运行。通过使用模块化的方法,jigsaw具有更高的灵活度和可扩展性,可以动态的把模块加入服务中。jigsaw利用面向对象的方法设计和开发,因而所有资源包括cgi脚本和文件都被视为对象,从此不难看出jigsaw在未来的前景。
但是对那些具有传统知识背景的人来说,这种新型体系结构可能会使人感到迷惑。安装和运行基于java的软件总是需要一定的技巧,而且运行这种便携式语言的性能仍值得怀疑。
一旦下载了必需的jdk(或者sdk)和最新的jigsaw版本,安装jigsaw将会非常的简单。在jigsaw服务器中,帮助用户设置jigsaw环境、运行服务和编译特性文件的帮助文件非常有限。但是以上的系统设置并不是很难,用户可以在几分钟完成这项工作。本地或者远程用户都可以通过浏览网页获取设置jigsaw管理服务器的详细信息。
jigadmin拥有友好的图形控制界面,利用它可以控制本地的jigsaw管理服务器。jigadmin有许多命令选项,其可控制的功能相当的复杂,用户可以利用它管理jigsaw管理服务器和http服务器。jigadmin使用不同的树型结构代表doc space,indexers,properties和realm等的相关内容。doc space很明显是关于jigadmin的目录和文件结构。properties指代的是servlet和loggind等的服务特性。realm和indexers则对用户不透明。直观的理解这些资源的意义是很不现实的。即使你对面向对象结构不太熟悉,仍很有必要全面的阅读jigadmin的文档,因为jigadmin中的很多概念难以掌握。
jigadmin的文档服务强调两个不同的处理阶段:索引阶段和服务阶段。索引阶段为所使用的文档生成资源,以便减轻服务阶段的压力。资源是理解jigsaw的关键,通过资源编辑器管理资源是体现jigadmin强大功能的关键。jigsaw把资源作为对象和外界进行交互。这些资源可以是原始对象,例如文本或者图形文件,或者生成的对象如servelet、cgi脚本和过滤的资源等。一旦你熟悉了jigsaw的这些核心概念后,你就感受到jigsaw的强大功能。jigsaw的这些特性使得它在动态脚本处理方面比其它同类产品更为出色,但其的学习过程也略为艰难。jigsaw所有的特性和概念都来源于把万维网看作一个整体环境,而这就使得jigsaw体现了最新的技术和标准。
和apache和ncsa httpd相比,在某些情况下jigsaw具有很好的性能。但不幸的是我们无法用webstone去测试和评估jigsaw的性能。即使和很少的client机连接,运行jigsaw的服务器就会因为过载而无法再返回测试结果。
很少有用户会把jigsaw作为成熟的产品使用,但是通过安装和使用jigsaw可以使我们了解http-ng(下一代)的web服务器产品。安装jigsaw在备用的服务器上,体验未来产品在协作环境中运行情况仍不失为一个好的方法。
总结
虽然本篇文章的目的不是动摇apache在web服务器市场的统治地位,但是这种改变的趋势是无法阻挡的。不幸的是apache仍然占据了市场的大部份额,多数linux厂商和媒介机构都推荐使用apache产品。apache的gui管理工具外观看起来非常美观,但是如果使用它去管理结构复杂的站点,这对眼睛和大脑来说都是项复杂的工作。使用这些工具也意味着你不得不运行那些管理服务器中并不需要的服务。
webstone环境的测试数据表明,在吞吐量、客户连接数和出错率方面,apache比其它产品性能优异。apache和zenus在服务器的响应时间上都非常出色,而且都为客户提供了成熟的高端解决方案,但是不可否认zenus在smp方面的优势。
选择web服务器时,服务器对动态脚本语言、api的支持和数据库连接的性能都是非常重要而且值得考虑的内容。如果你对服务器性能要求不是很严格的话,选择aolserver的tcl或者roxen的pike和rxml也不失为一个好的办法。对那些寻求可扩展框架web服务器的用户来说,roxen服务器值得一试。
