<-
Apache > HTTP 服务器 > 文档 > 版本 2.4 > 模块

Apache 模块 mod_so

可用语言:  en  |  fr  |  ja  |  ko  |  tr 

描述在启动或重启时将可执行代码和模块加载到服务器中
状态扩展
模块标识符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 更改,这些更改要求修改模块才能与新版本一起使用。

Support Apache!

主题

指令

错误修复清单

另请参阅

top

为 Windows 创建可加载模块

注意

在 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 指令加载它。

top

LoadFile 指令

描述链接到指定的物体文件或库
语法LoadFile filename [filename] ...
上下文服务器配置,虚拟主机
状态扩展
模块mod_so

当服务器启动或重新启动时,LoadFile 指令会链接到指定的物体文件或库;这用于加载某些模块工作可能需要的其他代码。Filename 是相对于 ServerRoot 的绝对路径或相对路径。

例如

LoadFile "libexec/libxmlparse.so"
top

LoadModule 指令

描述链接到物体文件或库,并添加到活动模块列表中
语法LoadModule module filename
上下文服务器配置,虚拟主机
状态扩展
模块mod_so

LoadModule 指令链接到物体文件或库 filename,并将名为 module 的模块结构添加到活动模块列表中。Module 是文件中类型为 module 的外部变量的名称,并在模块文档中列为 模块标识符

例如

LoadModule status_module "modules/mod_status.so"

从 ServerRoot 的 modules 子目录加载指定的模块。

可用语言:  en  |  fr  |  ja  |  ko  |  tr 

top

评论

注意
这不是问答部分。此处发布的评论应指向有关改进文档或服务器的建议,如果它们已实施或被认为无效/主题外,可能会被我们的版主删除。有关如何管理 Apache HTTP 服务器的问题应发送到我们的 IRC 频道 #httpd(在 Libera.chat 上)或发送到我们的 邮件列表