jjgod / blog Random notes by Jjgod Jiang.

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


8 Comments

不知寫什麼module呢?

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

但本人對這些完全不懂…

Posted by minghong on 27 July 2005 @ 11am

好像不只这么简单,我在运用时,发现了一些问题,用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,才通过。

Posted by starfeng on 19 September 2005 @ 5pm

我是用 VS.Net 2003 编译的… 库的问题?

Posted by jjgod on 19 September 2005 @ 5pm

[...] Win32 涓嬪紑鍙 Apache2 Module 璧锋 [...]

Posted by IT蹇椁——–鍙戠幇,鍒嗕韩,鍏虫敞浜掕仈缃 » Apache 鐨勬ā鍧楀紑鍙戣祫鏂 on 28 July 2006 @ 11pm

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

Posted by Ray Z on 16 August 2006 @ 5pm

有人已经写了个JavaScript服务端脚本了,网址:http://www.whitebeam.org/ 好象不太流行:)

Posted by wdgann on 3 September 2006 @ 7pm

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

Posted by xmlspace on 16 January 2007 @ 2pm

SpiderMonkey 提供的是客户端脚本的执行啊。

Posted by jjgod on 17 January 2007 @ 4am

Leave a Comment

说说 O’Reilly 的图书 Planet 的一个 patch