mod_so
描述: | 在 start-up 或重启 time 时将可执行的 code 和模块加载到服务器中 |
状态: | 延期 |
模块标识符: | so_module |
源文件: | mod_so.c |
兼容性: | 这是 Windows 上的 Base 模块(总是包含在内) |
摘要
在选定的操作系统上,此模块可用于在运行时通过动态共享 Object(DSO)机制将模块加载到 Apache HTTP Server,而不需要重新编译。
在 Unix 上,加载的 code 通常来自共享 object files(通常带有.so
扩展名),在 Windows 上,这可能是.so
或.dll
扩展名。
警告
为 Apache HTTP Server 的一个主要 version 构建的模块通常不适用于另一个。(e.g. 1.3 与 2.0,或 2.0 与 2.2)通常在一个主要的 version 与另一个主要版本之间进行 API 更改,这需要修改模块以使用新的 version。
为 Windows 创建可加载模块
注意
在 Windows 上,其中可加载的 files 通常具有.dll
的文件扩展名,Apache httpd 模块被称为mod_whatever.so
,就像它们在其他平台上一样。但是,您可能会遇到 third-party 模块,例如 PHP for example,继续使用.dll
约定。
虽然mod_so
仍然加载带有ApacheModuleFoo.dll
名称的模块,但新的命名约定是首选;如果要将可加载模块转换为 2.0,请将 name 修改为此 2.0 约定。
Unix 和 Windows 版本之间的 Apache httpd 模块 API 没有变化。许多模块将在 Windows 上运行,没有或几乎没有来自 Unix 的变化,尽管其他模块依赖于 Windows 中不存在的 Unix architecture 方面,并且不起作用。
当模块工作时,可以通过两种方式之一将其添加到服务器。与 Unix 一样,它可以编译到服务器中。因为 Windows 的 Apache httpd 没有 Apache httpd for Unix 的Configure
程序,所以必须将模块的源文件添加到 ApacheCore 项目文件中,并且必须将其符号添加到os\win32\modules.c
文件中。
第二种方法是将模块编译为 DLL,这是一个可以在运行时使用LoadModule
指令加载到服务器中的共享 library。这些模块 DLL 可以在任何 Apache httpd 上分发和运行 Windows 安装,无需重新编译服务器。
要创建模块 DLL,模块的源文件需要进行小的更改:模块 record 必须从 DLL 导出(稍后将创建;请参见下文)。为此,请将AP_MODULE_DECLARE_DATA
(在 Apache httpd 标头 files 中定义)添加到模块的模块 record 定义中。例如,如果您的模块具有:
module foo_module;
将以上内容替换为:
module AP_MODULE_DECLARE_DATA foo_module;
请注意,这只会在 Windows 上激活,因此如果需要,模块可以继续使用,不使用 Unix。此外,如果您熟悉.DEF
files,则可以使用该方法 export 模块 record。
现在,创建一个包含模块的 DLL。您需要将此链接与编译 libhttpd.dll shared library 时创建的 libhttpd.lib export library 相关联。您可能还必须更改编译器设置以确保正确定位 Apache httpd 标头 files。您可以在服务器根目录的模块目录中找到此 library。最好从树中获取现有的模块.dsp 文件,以确保正确配置 build 环境,或者将编译器和链接选项与.dsp 进行比较。
这应该创建模块的 DLL version。现在只需将其放在服务器根目录的modules
目录中,然后使用LoadModule
指令加载它。
LoadFile 指令
描述: | 链接在命名的 object 文件或 library 中 |
句法: | LoadFile filename[filename]... |
Context: | server config,virtual host |
状态: | 延期 |
模块: | mod_so |
启动或重新启动服务器时,LoadFile
指令链接到命名的 object files 或 libraries;这用于加载一些模块可能需要的额外 code。文件名是绝对路径或相对于ServerRoot。
例如:
LoadFile "libexec/libxmlparse.so"
LoadModule 指令
描述: | object 文件或 library 中的链接,并添加到 active 模块列表中 |
句法: | LoadModule module filename |
Context: | server config,virtual host |
状态: | 延期 |
模块: | mod_so |
LoadModule
指令链接在 object 文件或 library 文件名中,并将名为 module 的模块结构添加到 active 模块列表中。 Module 是文件中module
类型的外部变量的 name,在模块文档中列为模块标识符。
例如:
LoadModule status_module "modules/mod_status.so"
从 ServerRoot 的 modules 子目录加载命名模块。