web 服务器
在开始了解 Apache 前,我们先熟悉一下 web 服务器,因为 Apache 也是 web 服务器的一种。
Web 系统由客户端(浏览器)和服务器端两部分组成。Web 系统架构也被称为 B/S 架构。最常见的 Web 服务器有 Apache、IIS 等,常用的浏览器有 IE、Firefox、chrome 等。当你想访问一个网页时,需要在浏览器的地址栏中输入该网页的 URL(Uniform Resource Locator,简称为 URL)地址,或者是通过超链接链接到该网页。浏览器会向该网页所在的服务器发送一个 HTTP 请求,服务器会对接收到的请求信息进行处理,然后将处理的结果返回给浏览器,最终将浏览器处理后的结果呈现给用户。
web 服务器端的工作流程:
(1)客户端发送请求
客户端(通过浏览器)和 Web 服务器建立 TCP 连接,连接建立以后,向 Web 服务器发出访问请求(如 GET
)。根据 HTTP 协议,该请求中包含了客户端的 IP 地址、浏览器的类型和请求的 URL 等一系列信息。
(2)服务器解析请求
Web 服务器对请求按照 HTTP 协议进行解码来确定进一步的动作,设计的内容有三鼐要点:方法(GET
)、文档 (/sample.html)、和浏览器使用的协议(HTTP/1.1)其中方法告诉服务器应完动的动作,GET
方法的含义很明显是:服务器应定位、读取文件并将它返回给客户。
Web 服务器软件现在就知道了,它应该找到文件 / sample.html,并使用 HTTP/1.1 协议将内存返回给客户。信息是经过与请求到来相同的连接发出的,所以服务器不需要定们客户或创建新的连接。
(3)读取其它信息(非必须步骤)
Web 服务器根据需要去读取请求的其它部分。在 HTTP/1.1 下,客户还应给服务器提供关于它的一些信息。元信息(metainformation)可用来描述浏览器及其能力,以使服务器能据此确定如何返回应答。
(4)完成请求的动作
若现在没有错误出现,WWW 服务器将执行请求所要求的动作。要获取(GET
)一个文档,web 服务器在其文档树中搜索请求的文件(/sample.html)。这是由服务器机器上作为操作系统一部分的文件系统完成的。若文件能找到并可正常读取,则服务器将把它返回给客户。
如果成功:文件被发送出去。
首先,web 服务器发送一个状态码及一些描述信息。既然文件已经找到,则发送状态码 200
,表示一切都 OK ,文档随后发出,因为发送的信息是 HTML 文档,所以 Content-type
取值为 text/html
。文档长为 1024 个字节,所以 Content-type
取 1024
。服务器软件的标识及文件的时间属性信息也被包含在头域中。
如果失败:返回错误指示。
如果请求的文件没有找到或找到但无法读取,测请求无法满足。这时将返回不同于 200
的状态码。最常见的问题是请求中的文件名拼写有误,所以服务器无法找到该文件。这种情况下,服务器将发送一个状态码 —404
给客户。
(5)关闭文件和网络连接,结束会话。
当文件已被发邮或错误已发出后,web 服务器结束整个会话。它关闭打开的的被请求文件,关闭网络端口从而结束网络连接。有关的其它工作则是由客户端来完成的,包括接收数据,并以用户可读的方式呈现出来。这些与服务器无关。
Apache 架构
Apache 作为历史最悠久的 web 服务器,一直是 web 应用系统的首选,是世界上被广泛应用的 web 服务器软件,它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的 web 服务器端软件之一,也是流行架构 LAMP 的重要组成部分。
作为世界上最流行的 Web 服务器,Apache 遵循的同样是 HTTP 协议,默认端口号为 80
。下面来是 Apache 架构图。
Apache 特点:
- 支持最新的 HTTP/1.1 通信协议。Apache 是最先使用 HTTP/1.1 协议的 Web 服务器之一,它完全兼容 HTTP/1.1 协议并与 HTTP/1.0 协议向后兼容。Apache 已为新协议所提供的全部内容做好了必要的准备。
- 支持多计算机平台。Apache 几乎可以在所有的计算机操作系统上运行,包括主流的 UNIX、Linux 及 Windows 操作系统。
- 配置文件简单,易操作。用户可以通过直接修改 Apache 的配置文件信息来修改 Apache,操作起来十分方便。
- 支持实时监视服务器状态和定制服务器日志。Apache 在记录日志和监视服务器自身运行状态方面提供了很大的灵活性,可以通过 Web 浏览器来监视服务器的状态,也可以根据自己的需要来定制日志。
- 支持多种方式的 HTTP 认证。
- 支持 Web 目录修改。用户可以使用特定的目录作为 Web 目录。
- 支持 CGI 脚本,如 Perl、PHP 等。
- 支持服务器端包含指令(SSI)。
- 支持安全 Socket 层(SSL)。
- 支持 FastCGI。
- 支持虚拟主机。即通过在一台服务器上使用不同的主机名来提供多个 HTTP 服务。Apache 支持基于 IP、主机名和端口号三种类型的虚拟主机服务。
- 跟踪用户会话。当用户浏览基于 Apache 的 Web 站点时,可以通过 Apache 的 mod_usertrack 模块对其进行跟踪。
- 支持动态共享对象。Apache 的模块可在运行时动态加载,这就意味着这些模块可以被装入服务器进程空间,从而减少系统的内存开销。
- 支持多进程。当负载增加时,服务器会快速生成子进程来处理,从而提高系统的响应能力。
- 支持第三方软件开发商提供的功能模块。比如 Apache 加载 mod_jserv 模块后可以支持 Java Servlet,这样就可以运行 Java 应用程序了。
- 支持多线程和多进程混合模型的 MPM。 当 MPM 类型指定为 worker 时,由于是使用线程来处理,所以可以处理海量的请求,而系统资源的开销要小于基于进程的服务器。
Apache 工作模拟
Apache 2.X 支持插入式并行处理模块,称为多路处理模块(MPM)。在编译 Apache 时必须选择也只能选择一个 MPM,对类 UNIX 系统,有几个不同的 MPM 可供选择,它们会影响到 Apache 的速度和可伸缩性。
Worker MPM : 使用多个子进程,每个子进程中又有多个线程。每个线程处理一个请求,该 MPM 通常对高流量的服务器是一个不错的选择。因为它比 prefork MPM 需要更少的内存且更具有伸缩性。
Prefork MPM : 使用多个子进程,但每个子进程不包含多线程。每个进程只处理一个连接。在许多系统上它的速度和 worker MPM 一样快,但是需要更多的内存。这种无线程的设计在某些性况下优于 worker MPM,因为它可在应用于不具备线程安全的第三方模块上(如 PHP3/4/5),且在不支持线程调试的平台上易于调试,另外还具有比 worker MPM 更高的稳定性。
原文地址 www.cnblogs.com,作者虫师