Win32 下开发 Apache2 Module 起步

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 都是共通的,所以也就无需我饶舌了。

Author: Jiang Jiang

A software engineer from China, working on some OS for a fruit company. Interested in typography and science fiction.

8 thoughts on “Win32 下开发 Apache2 Module 起步”

  1. 不知寫什麼module呢?

    不知有沒有人有興趣把SpiderMonkey (Mozilla的JavaScript engine) port成Apache module呢?PHP的API實在太亂了。如果用重新定義一個server-side的API,我覺得用JavaScript不錯。

    但本人對這些完全不懂…

  2. 好像不只这么简单,我在运用时,发现了一些问题,用M$的免费版,编译不成功,报错:
    fatal error C1083: Cannot open include file: ‘windows.h’: No such file or directory
    于是,我在vc环境下作这个操作,compile没问题,build出错:
    error LNK2001: unresolved external symbol __imp__ap_hook_handler@16
    在网上一查,然来,它在windows下有些问题,见:http://projects.standblue.net/markive/message.moto?list=apachemodules&ID=793
    又重设了一下lib,才通过。

  3. 如果没有安装Visual Cpp的话,windows.h应该躺在Platform SDK目录下面。在系统变量里面设置一下LIB INCLUDE PATH等变量,这样编译器就很方便找到windows.h。

  4. 现在mozilla spidermonkey将要实现JIT实时编译,速度将会有很大的提高,这样做个服务端脚本前景很大,相对而言,PHP也可以利用这个VM以提高速度.
    我想先前的javascript服务端脚本没人做,我想主要是性能问题吧.

Leave a Reply

Your email address will not be published. Required fields are marked *