大家很清楚Apache大概是微软最头痛的对象之一。非常有趣的,微软CEO Steve Ballmer竟然在奥地利公开承认:“这是我们自己的错,如果我们不能提供足够的特点配上我们服务器软件的价位。当谈到在同一个服务器上同时提供数个网站时,Apache就是比较好!(Apache is simply better)。”,那微软自家的IIS呢?有了这句话,一切尽在不言中。
Apache人气节节上升
其实在Linux(或其它UNIX-Like的OS中),有好几个不错的网页服务器,如Apache、Zeus、Netscape(SunONE)、Notes/Domino…等。其中,Apache最受外界瞩目。
Apache最早是美国伊利诺大学里国家超级电算应用中心(NCSA)的Rob McCool开发出来的,当初取这个名字以尊崇印地安人的高超战技与坚忍不拔的毅力。Rob1994年离开NCSA后,由8位热心的Apache Group成员继续维护,之后又正式成立了Apache Software Foundation。Apache是目前市占率最高的网页服务器。
目前几乎所有的商用Linux操作系统已事先内建(bundle)了Apache,当然使用者也可自行下载原始程序,然后自行编译再进行安装。
如果选择自行编译并安装,初学者最常碰到的问题就是跟原有的文件搞混,而得出一些莫名其妙的结果。建议在编译时,特别小心路径处理,或者干脆先把原有的Apache移除掉(如rpm -e apache),再编译Apache程序。
模块化设计与开放
我个人认为,Apache最棒的地方在于其模块化设计与开放,这具体表现在几个方面:
效能
在Apache1.3时,原始程序是由25,000个C程序组成。由于公开源代码,许多人贡献心力帮忙程序除错,而使该软件达至最佳化,因而效能表现特佳,也十分稳定。另一项好处是使用者可选择自已需要的模块再行编译,用不上的可不用编译或挂载,如此一来,Apache运行效能可获得进一不的提升。例如,使用者可在httpd.conf文件中设定,决定使用mod_php、mod_perl,或是mod_SSL等模块。
安全性
在密码认证支持方面,Apache内建Basic、Digest两种选择。密码存储部分,Apache也早已支持LDAP、MySQL及PostgreSQL等,也允许使用者自行撰写密码认证的模块。
网址自动检查拼字
网友常常打了一长串的网址(URL)后只因少一个字;或多了一个字,或者是大小写搞错,结果经常找不到网页。Apache有一个很棒的功能就是可以自动检查拼字。不过,使用者必须手动启动(speling_module)。
自行修改核心
我曾经遇一家客户,这家公司的首页不是一个静态的网页,而是一个用C写的CGI程序,每次有人浏览这个网站时,可想而知的,该CGI程序就得自数据库抓取一堆数据。该网站经常当机,问题其实在于该CGI程序的负担太重,却又不愿意放弃这个功能。
后来,我们协助这家公司将该CGI功能移至Apache的核心模块之一(mod_perl)后,发现运行速度快了十多倍,而且当机频率也大幅降低。举例来说,当你使用数据库中内建的MAX函式,绝对会比自己另外写程序来找出最大值快得许多。
还有另一个案例是我们帮忙一家客户在mod_perl模块中整合某一个程序,将一个目录中提供下载的文件,全部都自动压缩成zip文件,以大幅减少客户下载的时间。其实,可以在Apache上发挥创意的地方太多,这只是其中一例。反观这些应用,在没有开放源代码的IIS中,是非常难以达成的。
内建Proxy功能
Apache也有内建的Proxy功能,您可以自动启动相关模块(proxy_module)。
替代IIS的其它选择
实际上,网页服务器转换的最大的问题还是在动态网页。如IIS上相当重要的ASP,应该要怎么处理呢?别急,以下几个方案可酌参考。
Java System ASP
前身原本是有名的Chilisoft,现为SUN 旗下产品线的一员。Java System ASP 可在Linux、Solaris及Windows上运行,支持ASP、XML、VBScript/Jscript、ODBC,且可存取多种数据库。 Java System ASP已与SUN 旗下的Java网页服务器事先整合,但也有部分功能可在Apache上运行。
PHP
LAMP(Linux、Apache、Mysql、PHP)的组合已成为相当受欢迎的自由软件组合。PHP这个在Apache上运行的动态网页语言,提供的功能类似IIS上的ASP语言。使用者也可以考虑直接将ASP网页改写成PHP网页。事实上,学习PHP网页就像ASP网页一样的容易。或者您也可以考虑另一个自由软件-asp2php,其可以协助将ASP网页自动转换成PHP网页。当然,可想见这个方式并无法保证100%的成功率,但至少可节省不少时间。另有一个更简易的“script2script”可参考。
JSP
像PHP一样,JSP也是一个不错的选择。JSP是SUN 重要的Java贡献之一,也可在Apache或SUN 的Java Web Server之上运行。另有一个asp2jsp可将ASP网页自动转换成JSP网页。
Perl
老牌的Perl语言在过去也是非常受到开发者欢迎的。创始人Larry Wall曾形容自己是个懒人,因而创造了这个简单的程序语言,用以节省撰写程序的时间。Perl在所有的网页服务器(不论是IIS或是Apache),或是操作系统(包括MAC、Windows、UNIX、Linux…)之上都能够运行无误。
ORACLE 9iAS Migration Kit for ASP
甲骨文旗下重要的产品,可以将ASP应用转换成JSP,而甲骨文也提供很好的数据库转换工具。当然,甲骨文的产品并不便宜。
转换会出现什么问题?
要由IIS转换到Linux上,当然无可避免的也会遇到一些问题。例如,静态网页与图文件的复制。这部分问题遭遇的问题通常较少,可慢慢手动复制,只要多花些时间耐心,当然也可使用LSP自动复制。
在目录权限与虚拟目录设定方面,Apache已有完整支持。当然,一如Samba,必须对Apache的设定文件语法有些基本了解,或者可使用Webmin及LSP协助设定,LSP可自动将IIS的设定自动转换到Apache上。
过去,在协助客户进行网页服务器转换时,经常发现客户有几个常犯的的错误,在此供各位参考。
CGI程序的权限
如果没有仔细设定CGI程序的权限,通常会得到一个“Internal Server Erro”的错误信息,多数使用者常因此而一头雾水,不知哪里出错。这在IIS上是不太容易发生的。另一种极端的情况是卯起来将目录、文件权限全部设成 777,那么在安全上,恐怕又会制造出一个大漏洞。
忘了启动某些模块
Apache的模块化相对也制造了一些可能出错的机会。例如,要使用PHP网页程序,别忘了在httpd.conf中启动php_module。尤其是若想使用某些旧的php3程序,就必须启动php3_module。另如ssl_module、cgi_module…等也应稍加注意。
密码认证
如前面所提及,常用的Apache密码共有Basic、Digest两种。Basic没有加密,使用时要格外小心;若选择Digest加密,经常会忘记启动Digest。还有,不支持http 1.1格式的浏览器遇到Digest密码将会出现错误。
大小写有关系
例如,在使用FTP上传文件时,常常会把文件小写传成大写,在Windows/IIS上档名,文件大小写并无差别,但用在Linux、Unix与Apache上可是大不相同。
ASP扩展名沿用?
前面已提及可用PHP、JSP或Perl取代原来的ASP网页。我们曾经运行一个项目,主要是从ASP转换至PHP(非LSP标准功能),前后花费 2个星期时间,才全部转换完毕。在测试过程中,我们发现很多自外部搜寻引擎连接至这些ASP文件的超级链接,全部都已失效。主要原因是因为ASP网页的 URL结尾是 .asp,而PHP网页的URL结尾是 .php。
幸好,Apache拥有强大的URL重写功能(不过要花一点时间了解),在设定好之后,可让所有URL完全不变(即便键入xxx.asp),还是可连结至最新的PHP网页。一如前面所提及,使用者也可自己写一个新模块,将所有要连接至.asp扩展名的request,重新导向(redirect)至.php网页之上。
一如其它服务器的转换一样,从微软的IIS到Linux的Web Server转换,不会是一蹴可几的任务,但是有了这么多Open Source的工具可供选择,及Sun、Oracle等大厂的加持,相信您对此应该已信心大增。最后,也要感谢微软CEO Steve Ballmer对Apache的大力赞扬。