Apache的许多外挂功能是通过模块实现的,比如php、subversion等,安装这些功能时就需要向Apache中添加模块。看似很简单,向 httpd.conf 中添加下面这一行(以php为例):
LoadModule php5_module "php-5.1.2/php5apache2.dll"
但是试图重新启动Apache时却往往不能成功。在事件查看器中可以看到,Apache无法找到指定的模块(php-5.1.2/php5apache2.dll)。可是明明这个文件好好地在那里,为什么?
原来是系统找不到该模块所需的 dll 文件,而造成启动失败,Apache在报告错误时简单地报告为模块找不到。
那么如何判断该模块需要哪些dll才能执行?一般来说,模块所需的dll都饱含在该模块的软件包中,例如上述 php5apache2.dll 所需的 php5ts.dll 就包含在php的发行包中,并与php5apache2.dll位于同一目录下。如果你安装了 Microsoft Visual C++ 6.0,其中附带的一个工具Dependency Walker可以精确地告诉你模块需要什么dll。用Dependency Walker打开php5apache2.dll,可以看到该模块需要以下的dll:php5ts.dll,libhttpd.dll,libapr.dll,libaprutil.dll,msvcrt.dll,kernel32.dll。其中 msvcrt.dll 和 kernel32.dll 是系统文件,libxxx.dll 是 apache 自带的 dll 文件。
确定了模块需要哪些dll之后,下一步就是让系统找到这些dll。Apache启动时,它会在Apache.exe所在目录(一般是C:\Program Files\Apache Group\Apache2\bin)和系统的 %PATH% 变量中寻找dll。所以最简单的方法就是将模块所需的 dll 文件复制到 Apache.exe 所在目录下,或者复制到 C:\Windows\system32 下。这样Apache就可以正常加载该模块了。
另外一个方法就是修改%PATH%环境变量,使之包含模块所需dll所在的目录。在上面的例子里,假设php安装在 C:\php 下,那么向 %PATH% 中添加 C:\php,Apache即可正常加载php模块了。但是,如果你的Apache是通过系统服务启动的话,那么修改完环境变量之后必须重新启动计算机才能正常启动Apache服务(参考:http://tech.idv2.com/2006/04/06/windows-env-var-vs-reboot/)。
1. 安装Apache ( http://httpd.apache.org) )和 ActiveState Perl (http://www.activestate.com/ )。
2. 安装mod_perl。
ppm install http://theoryx5.uwinnipeg.ca/ppmpackages/mod_perl.ppd
安装完毕之后会提示输入Apache的路径,输入类似于 D:/Apache2/modules。
3. 配置mod_perl。修改httpd.conf,增加以下几行:
LoadFile "C:/Perl/bin/perl58.dll"
LoadModule perl_module modules/mod_perl.so
<Files *.cgi>
SetHeader perl-script
PerlHandler ModPerl::PerlRun
Options +ExecCGI
</Files>
4. 重新启动Apache。
众所周知Apache是目前最优秀的HTTP服务器。实际上它不仅能当作服务器使用,也能够被用来架设代理服务器。本文就如何使用Apache架设HTTP代理服务器进行说明。
本文将基于Win32版的Apache 2.0.47进行说明。以前的Apache 1.x版配置方法稍有不同,但这里不作说明。
阅读全文 »