【发布时间】:2017-08-11 12:49:06
【问题描述】:
在运行期间或启动期间通过哪种机制加载 apache 模块?在该进程中是否使用了进程间通信等机制?是 apache 主动调用模块中的方法,还是模块本身调用 apache 方法,或两者兼而有之。
例如,get request commes 到 apache 并加载 mod_spnego(kerberos 身份验证)。 apache如何知道何时调用模块代码中的main函数?
【问题讨论】:
标签: apache2.2
在运行期间或启动期间通过哪种机制加载 apache 模块?在该进程中是否使用了进程间通信等机制?是 apache 主动调用模块中的方法,还是模块本身调用 apache 方法,或两者兼而有之。
例如,get request commes 到 apache 并加载 mod_spnego(kerberos 身份验证)。 apache如何知道何时调用模块代码中的main函数?
【问题讨论】:
标签: apache2.2
Apache 及其模块是用 C 编写的。模块在启动期间从共享对象文件(Unix 上的.so,Windows 上的.dll 或Dynamic Shared Objects)加载。在构建 Apache HTTPD 时,还可以将模块静态编译到 httpd 二进制文件中。两种方式,它们都在同一个过程中工作。
Apache 如何知道何时调用模块代码中的 main 函数?
看看这些文章,看看关于 Hooks 的说法。
Apache 2.2,Converting Modules from Apache 1.3 to Apache 2.0
新架构使用一系列钩子来提供调用 你的功能。您需要通过以下方式将这些添加到您的模块中 新功能,
static void register_hooks(void)。功能真的 一旦您了解需要做什么,就相当简单。 需要在处理的某个阶段调用的每个函数 请求需要注册,处理程序不需要。
Developing modules for the Apache HTTP Server 2.4
在 Apache HTTP Server 2.4 中处理请求时,您首先要做的就是 需要做的是在请求处理过程中创建一个钩子。一个 钩子本质上是一条消息,告诉服务器您愿意 服务或至少看一眼由 客户。所有处理程序,无论是 mod_rewrite、mod_authn_*、 mod_proxy 等等,被挂接到请求的特定部分 过程。您可能知道,模块有不同的用途。 有些是身份验证/授权处理程序,有些是文件或 脚本处理程序,而某些第三个模块重写 URI 或代理 内容。
【讨论】: