(转)Apache启动过程
2016-01-08 16:11
543 查看
2.4 Apache运行流程
在本节中我们将概要描述Apache的整个运行流程。Apache的运行流程可以细分为三个大的阶段。
Apache启动过程,如图2-7中的A部分所示。
接受客户端连接,并处理该连接,如图2-7中的B部分所示。
从连接中读取请求数据,处理客户端的一次请求,如图2-7中的C部分所示。
整个运行流程可以使用图2-7进行描述。
2.4.1 Apache启动过程
Apache的启动包括两个阶段:高权限启动阶段和低权限运行阶段,通常称之为两阶段启动方式。Apache总是以root用户身份启动运行,因此启动Apache时首先必须获得root权限。在启动的过程中,初始化的工作包括以下几个方面。
1. 初始化系统所需要的资源
由于Apache中绝大多数的内存都是基于内存池分配的,因此,在Apache启动的时候必须首先初始化内存池资源。另外,初始化的一个主要任务就是对配置文件进行读取和解析。在启动的过程中,配置文件会被读取两次。第一次读取称之为预读取,主要是从配置文件中获得第二次配置文件中需要的一些配置信息;基于第一次读取的结果,第二次才是真正的配置文件读取。
根据配置文件的解析结构,启动过程还会对虚拟主机进行相关的初始化准备工作。如果要连接数据库,我们还需要初始化数据库连接。
在启动的最后阶段,Apache将通过调用ap_mpm_run函数将控制权交给MPM模块。只有MPM模块执行失败或执行完毕的时候,执行权才会从MPM返回到主程序中。MPM是Apache服务器和操作系统之间的接口,它的目的只有一个,就是充分利用操作系统的特性,对服务器的并发效率进行最大的优化。
在早期的Apache 1.3版本中,仅有prefork模型被支持,这种模型以进程作为基本的执行单位。显然,在其余的操作系统中,比如Windows中,进程是个重量级的家伙,如果以进程为执行单元,那么服务器的负载会变得极其有限。事实上,由于各种操作系统本身特性的限制,不存在一种能"走遍天下"的适用于所有操作系统的并发模型。Apache将这些并发模型作为Apache的模块,这样,在特定的操作系统上,为了达到更高的并发效率,只要使用与之对应的MPM模块即可。
一旦权限从Apache主程序交给MPM,MPM将生成一定数目的进程或线程,侦听指定的端口,并等待接受客户端的连接。一旦接收到客户端请求,Apache将进入连接和请求处理阶段。Apache在接受和处理来自客户端的连接时,会以普通用户的权限去处理,而不会采用系统级别的权限。这种基本的安全策略可以防止Apache(或模块或脚本程序)遭到损害和变得脆弱。一旦黑客攻克了Apache服务器,那么此时它能够获得的权限也仅仅是Apache正在运行的普通用户权限,而不是超级用户权限。这样可以确保服务器的安全。
在本节中我们将概要描述Apache的整个运行流程。Apache的运行流程可以细分为三个大的阶段。
Apache启动过程,如图2-7中的A部分所示。
图2-7 Apache执行流程 |
从连接中读取请求数据,处理客户端的一次请求,如图2-7中的C部分所示。
整个运行流程可以使用图2-7进行描述。
2.4.1 Apache启动过程
Apache的启动包括两个阶段:高权限启动阶段和低权限运行阶段,通常称之为两阶段启动方式。Apache总是以root用户身份启动运行,因此启动Apache时首先必须获得root权限。在启动的过程中,初始化的工作包括以下几个方面。
1. 初始化系统所需要的资源
由于Apache中绝大多数的内存都是基于内存池分配的,因此,在Apache启动的时候必须首先初始化内存池资源。另外,初始化的一个主要任务就是对配置文件进行读取和解析。在启动的过程中,配置文件会被读取两次。第一次读取称之为预读取,主要是从配置文件中获得第二次配置文件中需要的一些配置信息;基于第一次读取的结果,第二次才是真正的配置文件读取。
根据配置文件的解析结构,启动过程还会对虚拟主机进行相关的初始化准备工作。如果要连接数据库,我们还需要初始化数据库连接。
在启动的最后阶段,Apache将通过调用ap_mpm_run函数将控制权交给MPM模块。只有MPM模块执行失败或执行完毕的时候,执行权才会从MPM返回到主程序中。MPM是Apache服务器和操作系统之间的接口,它的目的只有一个,就是充分利用操作系统的特性,对服务器的并发效率进行最大的优化。
在早期的Apache 1.3版本中,仅有prefork模型被支持,这种模型以进程作为基本的执行单位。显然,在其余的操作系统中,比如Windows中,进程是个重量级的家伙,如果以进程为执行单元,那么服务器的负载会变得极其有限。事实上,由于各种操作系统本身特性的限制,不存在一种能"走遍天下"的适用于所有操作系统的并发模型。Apache将这些并发模型作为Apache的模块,这样,在特定的操作系统上,为了达到更高的并发效率,只要使用与之对应的MPM模块即可。
一旦权限从Apache主程序交给MPM,MPM将生成一定数目的进程或线程,侦听指定的端口,并等待接受客户端的连接。一旦接收到客户端请求,Apache将进入连接和请求处理阶段。Apache在接受和处理来自客户端的连接时,会以普通用户的权限去处理,而不会采用系统级别的权限。这种基本的安全策略可以防止Apache(或模块或脚本程序)遭到损害和变得脆弱。一旦黑客攻克了Apache服务器,那么此时它能够获得的权限也仅仅是Apache正在运行的普通用户权限,而不是超级用户权限。这样可以确保服务器的安全。
相关文章推荐
- apache服务器全局配置详解
- apache 的工作模式 - (work模式)
- 阿里云部署django Ubuntu 12.04.5 + Apache2.2 + django1.8
- Linux环境下apache性能测试工具ab使用详解
- php7 编译安装 apache
- java.lang.NullPointerException org.apache.struts2.impl.StrutsActionProxy.getErrorMessage(StrutsActionProxy.java:69)
- apache commons常用工具类
- Mac 自带 apache
- win10不能启动apache该怎么解决?
- Apache 转发端口
- apache 的工作模式
- Mac升级到EI capitan重新设置Apache和php
- Apache Kafka 教程笔记
- 安装Apache提示APR not found的解决办法
- Apache配置虚拟目录和多主机头
- 第四十三天-www服务apache软件实战入门讲解
- Apache Email 遇到的线程释放慢问题
- Apache+mod_cluster+jboss EAP5.1搭建详解
- 关于apache的日志配置和模板格式分析
- apache目录的访问控制