在runtine或启动期间加载apache模块的机制是什么?在该进程中是否使用了进程间通信等机制? apache是否主动调用模块中的方法,或模块本身调用apache方法,或两者兼而有。
例如,get request commes to apache和mod_spnego(kerberos authentication)被加载。 apache如何知道何时在模块代码中调用main函数?
答案 0 :(得分:0)
Apache及其模块用C语言编写。模块在启动期间从共享对象文件(Unix上的.so
,Windows上的.dll
或Dynamic Shared Object)加载。在构建Apache HTTPD时,还可以将模块静态编译到httpd
二进制文件中。无论如何,他们都在同一个过程中工作。
Apache如何知道何时在模块代码中调用main函数?
看一下这些文章,看看有关 Hooks 的内容。
Apache 2.2,Converting Modules from Apache 1.3 to Apache 2.0
新架构使用一系列钩子来提供呼叫 你的功能。这些您需要通过a添加到您的模块中 新功能,
static void register_hooks(void)
。功能真的 一旦你明白需要做什么,就会相当直截了当。 在处理a的某个阶段需要调用的每个函数 请求需要注册,处理程序不需要。
Developing modules for the Apache HTTP Server 2.4
在Apache HTTP Server 2.4中处理请求时,首先要做的就是 需要做的是在请求处理过程中创建一个钩子。一个 hook本质上是一条告诉服务器你愿意的消息 要么服务,要么至少看一眼给出的某些要求 客户端。所有处理程序,无论是mod_rewrite,mod_authn_ *, mod_proxy等等,被挂钩到请求的特定部分 处理。您可能已经意识到,模块有不同的用途; 一些是身份验证/授权处理程序,另一些是文件或 脚本处理程序,而某些第三个模块重写URI或代理 内容。