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 都是共通的,所以也就无需我饶舌了。
不知寫什麼module呢?
不知有沒有人有興趣把SpiderMonkey (Mozilla的JavaScript engine) port成Apache module呢?PHP的API實在太亂了。如果用重新定義一個server-side的API,我覺得用JavaScript不錯。
但本人對這些完全不懂…
好像不只这么简单,我在运用时,发现了一些问题,用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,才通过。
我是用 VS.Net 2003 编译的… 库的问题?
如果没有安装Visual Cpp的话,windows.h应该躺在Platform SDK目录下面。在系统变量里面设置一下LIB INCLUDE PATH等变量,这样编译器就很方便找到windows.h。
有人已经写了个JavaScript服务端脚本了,网址:http://www.whitebeam.org/
好象不太流行:)
现在mozilla spidermonkey将要实现JIT实时编译,速度将会有很大的提高,这样做个服务端脚本前景很大,相对而言,PHP也可以利用这个VM以提高速度.
我想先前的javascript服务端脚本没人做,我想主要是性能问题吧.
SpiderMonkey 提供的是客户端脚本的执行啊。