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

2、运行阶段
     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个阶段都做了哪些事情呢?
   
    1、Post-Read-Request阶段
    在正常请求处理流程中,这是模块可以插入钩子的第一个阶段。对于那些想很早进入处理请求的模块来说,这个阶段可以被利用。
    2、URI Translation阶段
    Apache在本阶段的主要工作:将请求的URL映射到本地文件系统。模块可以在这阶段插入钩子,执行自己的映射逻辑。mod_alias就是利用这个阶段工作的。
    3、Header Parsing阶段
    Apache在本阶段的主要工作:检查请求的头部。由于模块可以在请求处理流程的任何一个点上执行检查请求头部的任务,因此这个钩子很少被使用。mod_setenvif就是利用这个阶段工作的。
 
    4、Access Control阶段
    Apache在本阶段的主要工作:根据配置文件检查是否允许访问请求的资源。Apache的标准逻辑实现了允许和拒绝指令。mod_authz_host就是利用这个阶段工作的。
    5、Authentication阶段
     Apache在本阶段的主要工作:按照配置文件设定的策略对用户进行认证,并设定用户名区域。模块可以在这阶段插入钩子,实现一个认证方法。
 
    6、Authorization阶段
    Apache在本阶段的主要工作:根据配置文件检查是否允许认证过的用户执行请求的操作。模块可以在这阶段插入钩子,实现一个用户权限管理的方法。
    7、MIME Type Checking阶段
    Apache在本阶段的主要工作:根据请求资源的MIME类型的相关规则,判定将要使用的内容处理函数。标准模块mod_negotiation和mod_mime实现了这个钩子。
    8、FixUp阶段
    这是一个通用的阶段,允许模块在内容生成器之前,运行任何必要的处理流程。和Post_Read_Request类似,这是一个能够捕获任何信息的钩子,也是最常使用的钩子。
    9、Response阶段
    Apache在本阶段的主要工作:生成返回客户端的内容,负责给客户端发送一个恰当的回复。这个阶段是整个处理流程的核心部分。
    10、Logging阶段
    Apache在本阶段的主要工作:在回复已经发送给客户端之后记录事务。模块可能修改或者替换Apache的标准日志记录。
 
    11、CleanUp阶段
    Apache在本阶段的主要工作:清理本次请求事务处理完成之后遗留的环境,比如文件、目录的处理或者Socket的关闭等等,这是Apache一次请求处理的最后一个阶段。
 
    模块的注入Apache的过程可以参考源码中server/core.c文件:
 
    mod_php5.so/ php5apache2.dll注入到Apache的函数中,最重要的就是Response阶段的处理函数。

三、Php处理器注入Apache的过程剖析
分享至
一键收藏,随时查看,分享好友!
0人
了这篇文章
类别: PHP┆阅读( 0)┆评论( 0) ┆ 返回博主首页┆ 返回博客首页
上一篇 玩转PHP的GD库 王泽宾 下一篇 架构师之路(1)---面向过程和面向对象 王泽宾

相关文章

  • php底层深度探索(3) ---Apache启动阶段分析 ..
  • linux安装 tomcat 6 笔记
  • Php底层深度探索(2)---Apache运行机制剖析 ..
  • apache+mysql+php数据自动备份

职位推荐

  • 高级Java工程师
  • C/C++开发工程师
  • 高级PHP研发工程师
  • IM开发工程师--楚楚街
  • nodejs前端开发工程师

文章评论

 
[1楼]        cao2xi  回复
2009-02-23 09:25:54
看不懂了~

[2楼]       [匿名]51CTO游客  回复
2009-02-23 13:31:10
说底层是有点难度

[3楼]       [匿名]51CTO游客  回复
2009-03-27 13:28:16
期待继续,吃透apache和php的交互,才能懂web

[4楼]       [匿名]jsam.huang  回复
2009-04-29 13:09:57
期待,可以加你的QQ聊下�幔堪l到我�]箱:[email protected]

[5楼]       [匿名]huhu  回复
2010-05-09 18:25:58
你的文章都很短,看起来很不方便

[6楼]       [匿名]花哥  回复
2011-01-29 23:25:55
怎么到这边有停掉了。期待“三、Php处理器注入Apache的过程剖析”啊。

 

发表评论            

昵  称:
登录  快速注册
验证码:

点击图片可刷新验证码请点击后输入验证码博客过2级,无需填写验证码

内  容:

同时赞一个

你可能感兴趣的:(apache,PHP,休闲,王泽宾,php深度探索)