• (转)Apache启动过程


    2.4  Apache运行流程

    在本节中我们将概要描述Apache的整个运行流程。Apache的运行流程可以细分为三个大的阶段。

    Apache启动过程,如图2-7中的A部分所示。

     
    图2-7  Apache执行流程

    接受客户端连接,并处理该连接,如图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正在运行的普通用户权限,而不是超级用户权限。这样可以确保服务器的安全。

  • 相关阅读:
    品尝阿里云容器服务:负载均衡与容器的关系
    基于微服务架构、运行于容器中的.NET Core示例应用eShopOnContainers
    基于VS2017的Docker Support体检ASP.NET Core站点的Docker部署
    用工厂模式解决ASP.NET Core中依赖注入的一个烦恼
    终于知道什么情况下需要实现.NET Core中的IOptions接口
    ASP.NET Core Web API处理HttpResponseMessage类型返回值的问题
    ASP.NET Core奇遇记:无用户访问,CPU却一直100%
    省一行是一行:在if语句中使用C# 7.0的模式匹配
    ASP.NET Core 2.0 Preview 1 中贴心的新特性
    .NET Core类库项目中如何读取appsettings.json中的配置
  • 原文地址:https://www.cnblogs.com/hf-china/p/5113594.html
Copyright © 2020-2023  润新知