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。
 
php底层深度探索(4) ---Apache运行阶段分析 王泽宾_第1张图片
     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文件:
php底层深度探索(4) ---Apache运行阶段分析 王泽宾_第2张图片
 
    mod_php5.so/ php5apache2.dll注入到Apache的函数中,最重要的就是Response阶段的处理函数。

三、Php处理器注入Apache的过程剖析
php apache 休闲 PHP

0

收藏

上一篇:玩转PHP的GD库 王泽宾 下一篇:架构师之路(1)---面向过程和...
php底层深度探索(4) ---Apache运行阶段分析 王泽宾_第4张图片
wangzebin

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

关注
php底层深度探索(4) ---Apache运行阶段分析 王泽宾_第5张图片

Ctrl+Enter 发布

发布

取消

6条评论

按时间倒序 按时间正序

推荐专栏更多

php底层深度探索(4) ---Apache运行阶段分析 王泽宾_第6张图片
JavaScript全栈工程师养成记

20年软件开发心法

共17章 | 边城__

¥51.00 348人订阅
订   阅
php底层深度探索(4) ---Apache运行阶段分析 王泽宾_第7张图片
Web网站安全评估分析及防御

企业级网安运维

共30章 | simeon2005

¥51.00 447人订阅
订   阅

猜你喜欢

我的友情链接 各种编程语言中的指针和引用 PHP Session apache Internal Server Error 解决方法 红警全能王V2012 实战Nginx与PHP(FastCGI)的安装、配置与优化 PHP中foreach循环详解 apache做反向代理服务器 MongoDB索引管理——创建索引,查看索引,删除索引,重建索引 LinuxのApache服务 第一弹(简单搭建跟基于端口) LinuxのApache服务 第二弹(基于IP跟域名) LinuxのApache服务 第三弹(权限控制) git及gitlab在项目开发中的实践应用一 前端框架MVVM和VUE的理解和应用 symfony源码分析之容器的生成与使用 PHP类推荐:QueryList|基于phpQuery的无比强大的PHP采集工具 系统架构设计之扩容 当网站性能遭遇瓶颈的时候 Laravel 5.5+ Dingo +Jwt 快速搭建 API系统 PHP多进程开发与Redis结合实践
php底层深度探索(4) ---Apache运行阶段分析 王泽宾_第8张图片
php底层深度探索(4) ---Apache运行阶段分析 王泽宾_第9张图片

扫一扫,领取大礼包

0

6
分享
php底层深度探索(4) ---Apache运行阶段分析 王泽宾_第10张图片
关注
wangzebin
php底层深度探索(4) ---Apache运行阶段分析 王泽宾_第11张图片