浅析Apache服务

1.简介

Apache(Apache HTTP Server:阿帕奇)是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器软件之一。
它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。它是一个模块化的服务器,源于NCSAhttpd服务器,经过多次修改,成为世界使用排名第一的Web服务器软件。

2.工作原理

Apache服务的三种工作模式:prefork、worker和event

(1).prefork

prefork模式(默认模式)是很古老但是非常稳定的模式。使用的是多个子进程,Apache在启动之初,控制进程会建立若干个子进程,然后等待请求进来,
Apache总是试图保持一些备用的 (spare)或是空闲的子进程用于迎接即将到来的请求。这样客户端就无需在得到服务前等候子进程的产生。
在Unix系统中,父进程通常以root身份运行以便邦定80端口,而 Apache产生的子进程通常以一个低特权的用户运行。
User和Group指令用于配置子进程的低特权用户。运行子进程的用户必须要对他所服务的内容有读取的权限,但是对服务内容之外的其他资源必须拥有尽可能少的权限。
这样可以减少频繁创建和销毁进程的开销,每个子进程只有一个线程,在一个时间点内,只能处理一个请求。
这是一个成熟稳定,可以兼容新老模块,也不需要担心线程安全问题,但是一个进程相对占用资源,消耗大量内存,不擅长处理高并发的场景

浅析Apache服务
(2).worker

worker模式和prefork模式相比,worker模式使用了多进程和多线程的混合模式,worker模式也同样会先预派生一些子进程,然后每个子进程创建一些线程,
同时包括一个监听线程,每个请求过来会被分配到一个线程来服务。线程比起进程会更轻量,因为线程是通过共享父进程的内存空间,
因此,内存的占用会减少一些,在高并发的场景下会比prefork有更多可用的线程,表现会更优秀一些。
另外,如果一个线程出现了问题也会导致同一进程下的线程出现问题,如果是多个线程出现问题,也只是影响Apache的一部分,而不是全部。
由于用到多进程多线程,需要考虑到线程的安全了,在使用keep-alive长连接的时候,某个线程会一直被占用,即使中间没有请求,需要等待到超时才会被释放(该问题在prefork模式下也存在)。

浅析Apache服务
(3).event

这是Apache最新的工作模式,它和worker模式很像,不同的是在于它解决了keep-alive长连接的时候占用线程资源被浪费的问题,
在event工作模式中,会有一些专门的线程用来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务器的线程,
执行完毕后,又允许它释放。这增强了在高并发场景下的请求处理。

浅析Apache服务
3.Apache的运行

Apache运行分为:启动阶段和运行阶段

(1).启动阶段

在启动阶段,Apache主要进行配置文件解析(例如http.conf以及Include指令设定的配置文件等)、模块加载(例如mod_php.so,mod_perl.so等)和系统资源初始化(例如日志文件、共享内存段等)工作。
在这个阶段,Apache为了获得系统资源最大的使用权限,将以特权用户root(X系统)或超级管理员administrator(Windows系统)完成启动。

浅析Apache服务
(2).运行阶段

在运行阶段,Apache主要工作是处理用户的服务请求。
在这个阶段,Apache放弃特权用户级别,使用普通权限,这主要是基于安全性的考虑,防止由于代码的缺陷引起的安全漏洞。

浅析Apache服务
4.特点

1.开放源代码
2.跨平台应用,可运行windoows和大多数linux系统
3.支持perl,php,python和java等多种网页编辑语言
4.采用模块化设计
5.支持虚拟主机与多种方式的HTTP认证
6.运行非常稳定,具有相较好的安全性
7.提供用户会话过程的跟踪
8.拥有简单而强有力的基于文件的配置过程

参考简书:https://www.jianshu.com/p/5187a3506bd3