Apache HTTP 服务器版本 2.4
描述 | 在启动或重启时将可执行代码和模块加载到服务器中 |
---|---|
状态 | 扩展 |
模块标识符 | so_module |
源文件 | mod_so.c |
兼容性 | 这是 Windows 上的基本模块(始终包含) |
在某些操作系统上,此模块可用于通过 动态共享对象 (DSO) 机制在运行时将模块加载到 Apache HTTP 服务器中,而不是需要重新编译。
在 Unix 上,加载的代码通常来自共享对象文件(通常以 .so
扩展名结尾),在 Windows 上,这可能是 .so
或 .dll
扩展名。
为 Apache HTTP 服务器的一个主要版本构建的模块通常不能在另一个主要版本上运行。(例如,1.3 与 2.0,或 2.0 与 2.2)在两个主要版本之间通常存在 API 更改,这些更改要求修改模块才能与新版本一起使用。
在 Windows 上,可加载文件通常具有 .dll
文件扩展名,Apache httpd 模块称为 mod_whatever.so
,就像它们在其他平台上一样。但是,您可能会遇到继续使用 .dll
约定的第三方模块,例如 PHP。
虽然 mod_so
仍然加载具有 ApacheModuleFoo.dll
名称的模块,但新的命名约定是首选;如果您正在将可加载模块转换为 2.0,请将名称修复为此 2.0 约定。
Apache httpd 模块 API 在 Unix 和 Windows 版本之间没有变化。许多模块可以在 Windows 上运行,无需或只需少量更改即可从 Unix 运行,尽管其他模块依赖于 Windows 中不存在的 Unix 架构的某些方面,并且无法运行。
当模块确实可以运行时,可以通过两种方式之一将其添加到服务器中。与 Unix 一样,它可以编译到服务器中。由于 Windows 的 Apache httpd 没有 Unix 的 Apache httpd 的 Configure
程序,因此必须将模块的源文件添加到 ApacheCore 项目文件中,并且必须将它的符号添加到 os\win32\modules.c
文件中。
第二种方法是将模块编译为 DLL,这是一种共享库,可以使用 LoadModule
指令在运行时加载到服务器中。这些模块 DLL 可以分发并在任何 Apache httpd for Windows 安装上运行,无需重新编译服务器。
要创建模块 DLL,需要对模块的源文件进行少量更改:必须从 DLL 中导出模块记录(这将在稍后创建;请参见下文)。为此,将 AP_MODULE_DECLARE_DATA
(在 Apache httpd 头文件中定义)添加到模块的模块记录定义中。例如,如果您的模块有
module foo_module;
将以上内容替换为
module AP_MODULE_DECLARE_DATA foo_module;
请注意,这只会激活在 Windows 上,因此如果需要,模块可以继续在 Unix 上使用,无需更改。此外,如果您熟悉 .DEF
文件,则可以使用该方法导出模块记录。
现在,创建一个包含您的模块的 DLL。您需要将它链接到编译 libhttpd.dll 共享库时创建的 libhttpd.lib 导出库。您可能还需要更改编译器设置以确保 Apache httpd 头文件位于正确的位置。您可以在服务器根目录的 modules 目录中找到此库。最好从树中获取现有的模块 .dsp 文件以确保构建环境配置正确,或者将编译器和链接选项与您的 .dsp 进行比较。
这应该会创建一个 DLL 版本的模块。现在只需将其放在服务器根目录的 modules
目录中,然后使用 LoadModule
指令加载它。