Apache工作原理

  在开始了解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更高的稳定性。

Apache工作原理的更多相关文章

  1. Nginx、Apache工作原理及Nginx为何比Apache高效

    Nginx才短短几年,就拿下了web服务器大笔江山,众所周知,Nginx在处理大并发静态请求方面,效率明显高于httpd,甚至能轻松解决C10K问题. 在高并发连接的情况下,Nginx是Apache服 ...

  2. php和apache工作原理?

    1.CGI和FastCGI是apache处理php脚本的其中两种工作模式,还有ISAPI,SAPI等 2.而php-fpm并不是一种工作模式,而是一个PHP在FastCGI模式运行下的进程管理器,全称 ...

  3. 4.Apache Spark的工作原理

    Apache Spark的工作原理 1 Why Apache Spark 2 关于Apache Spark 3 如何安装Apache Spark 4 Apache Spark的工作原理 5 spark ...

  4. Apache kafka 工作原理介绍

    消息队列 消息队列技术是分布式应用间交换信息的一种技术.消息队列可驻留在内存或磁盘上, 队列存储消息直到它们被应用程序读走.通过消息队列,应用程序可独立地执行--它们不需要知道彼此的位置.或在继续执行 ...

  5. Apache Lucene评分机制的内部工作原理

    Apache Lucene评分机制的内部工作原理' 第5章

  6. 菜鸟学Struts2——Struts工作原理

    在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...

  7. 【夯实Nginx基础】Nginx工作原理和优化、漏洞

    本文地址 原文地址 本文提纲: 1.  Nginx的模块与工作原理    2.  Nginx的进程模型    3 . NginxFastCGI运行原理        3.1 什么是 FastCGI   ...

  8. 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...

  9. HTTP协议请求响应过程和HTTPS工作原理

    HTTP协议 HTTP协议主要应用是在服务器和客户端之间,客户端接受超文本. 服务器按照一定规则,发送到客户端(一般是浏览器)的传送通信协议.与之类似的还有文件传送协议(file transfer p ...

随机推荐

  1. bitmap格式分析(转)

    源:bitmap格式分析 参考:bitmap图像介绍 最近正在着手开发一个图片库,也就是实现对常见图片格式的度写操作.作为总结与积累,我会把这些图片格式以及加载的实现写在我的Blog上. 说到图片,位 ...

  2. UIP源码之ARP过程分析

    之前我们使用UIP实现了tcp和udp通讯今天来说说UIP的实现流程,当然,这篇文章里面只会涉及tcp和udp,暂时还没办法说DHCP,因为UIP的DHCP实现使用了协程的概念,下一章将协程之后再说D ...

  3. HUST 1601 Shepherd

    间隔小的时候dp预处理,大的时候暴力..正确做法不会... dp[i][j]表示以i为开头,间隔为j的和,递推:dp[i][j] = dp[i + j][j] + a[i] 测试数据中间隔可能是0.. ...

  4. 友坚恒天.开发板(Cotex-A9 Exynos4412 开发板)

    友坚恒天.开发板 Cotex-A9 Exynos4412 开发板

  5. Nodejs之package.json介绍说明

    规范的package.json及package.json中各属性的作用. "name":包名. "description":包简介. "author& ...

  6. Python的lambda匿名函数

    lambda函数也叫匿名函数,即,函数没有具体的名称.先来看一个最简单例子: def f(x):return x**2print f(4) Python中使用lambda的话,写成这样 g = lam ...

  7. Spring Security——核心类简介——获得登录用户的相关信息

    核心类简介 目录 1.1     Authentication 1.2     SecurityContextHolder 1.3     AuthenticationManager和Authenti ...

  8. java 遍历List 和 Map的几种方法

    java遍历List 1.(性能最差) for(String tmp:list) { //System.out.println(tmp); } 2.(性能最好) for(int i = 0; i &l ...

  9. VIM 第二天--快捷键

    好吧,今天是重新学习vim的第二天,不得不说,收货丰厚. 先来勉励一下自己: 存活(目前状态) 感觉很好 感觉更好,更强,更快 吃用vim超能力 vimtutor练到lesson 7了,略微总结一下, ...

  10. 数据库基础-JOIN

    JOIN分类 三.JOIN分类详解 INNER JOIN: 仅仅返回两个表中,匹配列相同的列值,所在行的数据. SELECT * FROM Table1 t1 INNER JOIN Table2 t2 ...