Apache 的模块是很有意思的东西,原来 O’Reilly 有本 Writing Apache Modules in Perl and C,算是这方面的终极宝典,可惜此书名不副实,Perl 的内容占了绝大部分,C 的内容几乎是一笔带过 (也难怪,作者就是 mod_perl 的作者嘛),而且这本书是 1999 年写的,也是按照 Apache 1.3 的内容来写的,和现在 Apache2 的情况已经有了不少差别。
而且网上有的教程都是讲 Linux 下的配置过程,问题在于我自己在测试开发的时候是要用 Win32 下的 Apache 的,所以只好自己搞定。
我在网上 google 了一下,没找到什么详细的资料,考虑可能有朋友需要这种上手的教程,把今天的步骤写下来。
安装 Apache 2.
到 这里 找到一份最简单的 Apache2 module 源代码,这里有这份代码的详细说明,不过讨论是 Unix/Linux 下的情况。
如果你没有安装 Visual C++ 6.0 或者 Visual Studio .Net 的话,可以安装 Visual C++ 2003 Toolkit,这是免费的 M$ 的 C++ 编译器。
在 mod_tut1.c 的开头加一句:
#ifndef WIN32
#define WIN32
#endif
把 Apache2 的头文件和库文件目录加入 INCLUDE 和 LIB 环境变量中。可以参考下面这个 batch file:
set LIB=%LIB%;E:\Progra~1\Apache~1\Apache2\lib
set INCLUDE=%INCLUDE%;E:\Progra~1\Apache~1\Apache2\include
用 `cl /c mod_tut1.c` 编译,生成 `mod_tut1.obj`。
用 `link /DLL mod_tut1.obj libhttpd.lib` 链接起来,生成 `mod_tut1.dll`。
把 `mod_tut1.dll` 改名为 `mod_tut1.so`,复制到 Apache2 安装目录的 modules 子目录下。
在 httpd.conf 中加一句:
LoadModule tut1_module modules/mod_tut1.so
重新启动 Apache,访问 http://localhost/ 一次,然后打开 access.log,看看里面有没有新增“A request was made”的内容,有的话,说明搞定了。:)
当然,上面的内容也不是开发的实际过程,具体的开发过程,前面提到的那本书和 Apache 的文档里描述得更详细,这些,无论是 Unix/Linux 还是 Win32 都是共通的,所以也就无需我饶舌了。