php底层深度探索(4) ---Apache运行阶段分析 王泽宾

二、运行阶段
     2.1 运行阶段概述
    在运行阶段,Apache主要工做是处理用户的服务请求。
    在这个阶段,Apache放弃特权用户级别,使用普通权限,这主要是基于安全性的考虑,防止因为代码的缺陷引发的安全漏洞。象微软的IIS就曾遭受“红色代码(Code Red)”和“尼姆达(Nimda)”等恶意代码的溢出***。
 
 2.2 运行阶段流程
    Apache将请求处理循环分为11个阶段,依次是:Post-Read-Request,URI Translation,Header Parsing,Access Control,Authentication,Authorization,MIME Type Checking,FixUp,Response,Logging,CleanUp。
 
     Apache Hook机制
     Apache的Hook机制是指:Apache 容许模块(包括内部模块和外部模块,例如mod_php5.so,mod_perl.so等)将自定义的函数注入到请求处理循环中。换句话说,模块能够在Apache的任何一个处理阶段中挂接(Hook)上本身的处理函数,从而参与Apache的请求处理过程。

    mod_php5.so/ php5apache2.dll就是将所包含的自定义函数,经过Hook机制注入到Apache中,在Apache处理流程的各个阶段负责处理php请求。

    关于Hook机制在Windows系统开发也常常遇到,在Windows开发既有系统级的钩子,又有应用级的钩子。常见的翻译软件(例如金山词霸等等)的屏幕取词功能,大多数是经过安装系统级钩子函数完成的,将自定义函数替换gdi32.dll中的屏幕输出的绘制函数。
 
    Apache请求处理循环详解
    Apache请求处理循环的11个阶段都作了哪些事情呢?
   
    一、Post-Read-Request阶段
    在正常请求处理流程中,这是模块能够插入钩子的第一个阶段。对于那些想很早进入处理请求的模块来讲,这个阶段能够被利用。
    二、URI Translation阶段
    Apache在本阶段的主要工做:将请求的URL映射到本地文件系统。模块能够在这阶段插入钩子,执行本身的映射逻辑。mod_alias就是利用这个阶段工做的。
    三、Header Parsing阶段
    Apache在本阶段的主要工做:检查请求的头部。因为模块能够在请求处理流程的任何一个点上执行检查请求头部的任务,所以这个钩子不多被使用。mod_setenvif就是利用这个阶段工做的。
 
    四、Access Control阶段
    Apache在本阶段的主要工做:根据配置文件检查是否容许访问请求的资源。Apache的标准逻辑实现了容许和拒绝指令。mod_authz_host就是利用这个阶段工做的。
    五、Authentication阶段
     Apache在本阶段的主要工做:按照配置文件设定的策略对用户进行认证,并设定用户名区域。模块能够在这阶段插入钩子,实现一个认证方法。
 
    六、Authorization阶段
    Apache在本阶段的主要工做:根据配置文件检查是否容许认证过的用户执行请求的操做。模块能够在这阶段插入钩子,实现一个用户权限管理的方法。
    七、MIME Type Checking阶段
    Apache在本阶段的主要工做:根据请求资源的MIME类型的相关规则,断定将要使用的内容处理函数。标准模块mod_negotiation和mod_mime实现了这个钩子。
    八、FixUp阶段
    这是一个通用的阶段,容许模块在内容生成器以前,运行任何须要的处理流程。和Post_Read_Request相似,这是一个可以捕获任何信息的钩子,也是最常使用的钩子。
    九、Response阶段
    Apache在本阶段的主要工做:生成返回客户端的内容,负责给客户端发送一个恰当的回复。这个阶段是整个处理流程的核心部分。
    十、Logging阶段
    Apache在本阶段的主要工做:在回复已经发送给客户端以后记录事务。模块可能修改或者替换Apache的标准日志记录。
 
    十一、CleanUp阶段
    Apache在本阶段的主要工做:清理本次请求事务处理完成以后遗留的环境,好比文件、目录的处理或者Socket的关闭等等,这是Apache一次请求处理的最后一个阶段。
 
    模块的注入Apache的过程能够参考源码中server/core.c文件:
 
    mod_php5.so/ php5apache2.dll注入到Apache的函数中,最重要的就是Response阶段的处理函数。

3、Php处理器注入Apache的过程剖析

0javascript

收藏css

wangzebin

33篇文章,32W+人气,4粉丝

Ctrl+Enter 发布html

发布前端

取消java

6条评论jquery

按时间倒序 按时间正序

扫一扫,领取大礼包git

0ajax

6
分享
wangzebin
相关文章
相关标签/搜索