Apache Hook机制解析(上)——钩子机制的实现

Apache的Hook机制允许第三方模块扩展服务器功能,例如通过log_transaction钩子实现自定义日志记录。主框架定义钩子,模块挂载实现,核心流程触发钩子。钩子的声明、定义、触发和挂载涉及apr库的宏和结构,例如ap_HOOK_log_transaction_t、ap_hook_log_transaction、ap_run_log_transaction等。
摘要由CSDN通过智能技术生成
Apache中大量使用了Hook机制,使得第三方开发Module可以扩展Apache服务器的默认处理。

Apache Hook功能可以简述如下:
1.    程序主框架根据名称声明和定义Hook
2.    第三方 Module 通过实现和挂载Hook来扩展主框架的行为。
3.    程序主框架在某些操作发生时显示触发Hook

例如, Apache的事务日志(也即访问日志)就是用Hook机制实现的,对应上面的3个环节如下:
1.    在 Apache核心代码 protocol.c中定义了名为log_transaction的Hook:
APR_HOOK_STRUCT(
    …
    APR_HOOK_LINK(log_transaction)
    …
)



AP_IMPLEMENT_HOOK_RUN_ALL(int,log_transaction,
                          (request_rec *r), (r), OK, DECLINED)

2.    可选模块 mod_log_config通过挂载Hook来扩展主程序的行为:
static void register_hooks(apr_pool_t *p)
{
        …   
        ap_hook_log_transaction(multi_log_transaction,NULL,
                                NULL,APR_HOOK_MIDDLE);
        …
}    

3.    在 Apache的核心流程 ap_process_request函数中显式触发了该Hook:
void ap_process_request(request_rec *r)
{
    …

    ap_run_log_transaction(r)
    …
}

上述机制是如何实现的呢,在此先做一个简单的描述:
1.    首先,Hook的基础实现是在apr库中,由 apr_hooks.h
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值