Apache的运行过程和参数详解

什么是Apache

Apache是一种开源的Web服务器软件,它可以在不同的操作系统上运行,如Linux、Unix、Windows等。Apache可以处理HTTP请求,并将Web页面发送给客户端浏览器。它也可以支持动态内容的生成,如PHP、Perl等脚本语言。Apache具有高度的可配置性和扩展性,因此被广泛用于Web应用程序的开发和部署

Apache 使用的协议

Apache使用的是HTTP协议,即超文本传输协议。HTTP协议是一种应用层协议,它是Web应用程序的基础。HTTP协议定义了客户端和服务器之间的通信规则,包括请求和响应的格式、状态码、缓存机制等。Apache作为Web服务器,可以处理HTTP请求,并将Web页面发送给客户端浏览器,以实现Web应用程序的功能。

apache默认占用的端口是80端口也可以进行 修改

/etc/httpd/conf/httpd.conf

在这里插入图片描述

·

Apache的每次资源访问的工作原理 (也就是三次握手和四次挥手)

三次握手和四次挥手是 TCP 协议中的两个重要概念。

  1. 三次握手

三次握手是指在 TCP 连接建立时,客户端和服务器之间需要进行三次交互,以确保双方都能收到对方的信息。具体步骤如下:

  • 第一次握手:客户端向服务器发送 SYN 报文段,并设置初始序列号(ISN)。
  • 第二次握手:服务器收到客户端的 SYN 报文段后,向客户端发送 SYN+ACK 报文段,并设置确认序列号(ACK)为客户端的 ISN+1,同时设置自己的 ISN。
  • 第三次握手:客户端收到服务器的 SYN+ACK 报文段后,向服务器发送 ACK 报文段,并设置 ACK 序列号为服务器的 ISN+1。

通过三次握手,双方都能确认对方的 IP 地址、端口号和初始序列号,建立起可靠的 TCP 连接。

  1. 四次挥手

四次挥手是指在 TCP 连接关闭时,客户端和服务器之间需要进行四次交互,以确保双方都能正常关闭连接。具体步骤如下:

  • 第一次挥手:客户端向服务器发送 FIN 报文段,表示客户端已经没有数据要发送了。
  • 第二次挥手:服务器收到客户端的 FIN 报文段后,向客户端发送 ACK 报文段,表示已经收到客户端的 FIN 报文段。
  • 第三次挥手:服务器向客户端发送 FIN 报文段,表示服务器已经没有数据要发送了。
  • 第四次挥手:客户端收到服务器的 FIN 报文段后,向服务器发送 ACK 报文段,表示已经收到服务器的 FIN 报文段。

通过四次挥手,双方都能正常关闭连接,释放相关资源。

需要注意的是,三次握手和四次挥手是 TCP 协议中保证可靠性的重要机制,但也会造成一定的延迟和资源浪费


用一个搞笑的案例来说明三次握手

你是一个大胃王,去了一家餐馆点了一份巨大的汉堡,但你不确定是否能吃完,于是你想要跟服务员确认一下:

  • 第一次握手:你向服务员说:“我要点一份巨大的汉堡。”这就相当于客户端向服务器发送 SYN 报文段,并设置初始序列号(ISN)。
  • 第二次握手:服务员收到你的点餐后,回答道:“好的,巨大的汉堡马上就来。”这就相当于服务器收到客户端的 SYN 报文段后,向客户端发送 SYN+ACK 报文段,并设置确认序列号(ACK)为客户端的 ISN+1,同时设置自己的 ISN。
  • 第三次握手:你收到服务员的回答后,说道:“好的,那我就点一份巨大的汉堡。”这就相当于客户端收到服务器的 SYN+ACK 报文段后,向服务器发送 ACK 报文段,并设置 ACK 序列号为服务器的 ISN+1。

通过三次握手,你和服务员都能确认对方的点餐信息,建立起可靠的点餐连接。如果你最终成功吃完了汉堡,就相当于使用四次挥手正常关闭了点餐连接

每次的数据传输开始和结束都会经历以上两次 操作每个数据包

Apache的工作模式

工作模式:
	http请求报文:http request
	http响应报文:http reponse
	  一次http事务: 请求<-->响应
	 
	web资源:web resource
	静态资源(无须服务端做出额外处理):.jpg .png .gif .html  .txt .js  .css .mp3
	动态资源(服务端需要通过执行程序做出 处理,发送给客户端的是程序的运行结果):.php 

Apache的一次完整的请求过程

​ 一次完整的http请求处理过程:

(1)建立或处理连接:接受请求或拒绝请求;
(2)接受请求:接受来自于网络上的主机请求报文中对某特定资源的一次请求的过程;
(3)处理请求:对请求报文进行解析,获取客户端请求的资源及请求方法等相关信息;
(4)访问资源:获取请求报文中请求的资源;
(5)构建响应报文:
(6)访问响应报文;
(7)记录日志;

Apache的进程模型和特性

	prefork:多进程模型,每个进程响应一个请求;
		一个主进程: 负责生成子进程及回收子进程;负责接受请求,并将其派发给某子进程进行处理;
		n个进程:每个子进程处理一个请求
		工作模型:会预选生成几个空闲进程,随时等待用于响应用户请求;最大空闲和最小空闲
	worker:多进程多线程模型,每线程处理一个用户请求;
		一个人主进程:负责生成子进程,负责接受请求,并将其派发给某子进程进行处理
		多个子进程:每个子进程负责生成多个线程
		每个线程:负责响应用户请求
		并发响应数量: m*n
			m:进程数量
			n:每个子进程所能创建的最大线程数量
	event:事件驱动模型,多进程模型,每个进程响应多个请求
		一个主进程:负责生成子进程及回收子进程;负责接受请求,并将其派发给某子进程进行处理
		子进程:基于事件驱动机制响应多个请求;
		
1. 预派生模型(Pre-Fork Model):在启动Apache时,预先派生多个子进程,每个子进程独立处理请求。这种模型可以保证请求之间的隔离性,但是每个进程都需要占用一定的内存,如果请求量较大,会导致系统资源消耗过多。

2. 工作线程模型(Worker Thread Model):每个进程中有多个线程,每个线程独立处理请求。这种模型可以减少进程之间的切换开销,提高系统性能,但是需要考虑线程之间的同步和资源共享问题。

3. 多进程/多线程混合模型(Multi-Process/Thread Model):同时使用多个进程和多个线程来处理请求,兼顾了两种模型的优点,但是也存在进程间通信和资源共享的问题。

4. 事件驱动模型(Event-Driven Model):采用异步I/O技术,通过事件驱动的方式处理请求,避免了多线程或多进程带来的开销和资源浪费,但是需要对异步I/O技术有一定的了解和使用经验。

结合以上模型

  1. prefork:表示使用预派生模型。
  2. worker:表示使用工作线程模型。
  3. event:表示使用事件驱动模型。

如果在配置文件中没有指定运行模型,则默认使用预派生模型

配置文件详解

  • ServerRoot:指定 Apache 的根目录,一般情况下为 /usr/local/apache 或 /etc/httpd。
  • Listen:指定 Apache 监听的端口号,默认为 80。
  • ServerName:指定 Apache 服务器的主机名,一般设置为域名。
  • DocumentRoot:指定 Apache 的默认文档根目录,一般为 /var/www/html。网站根目录 主目录
  • DirectoryIndex:指定 Apache 服务器默认的首页文件,一般为 index.html。如果有php 就是Index.php
  • ErrorLog:指定 Apache 错误日志的存放路径。
  • CustomLog:指定 Apache 访问日志的存放路径。
  • Options:指定 Apache 的选项,如 FollowSymLinks、Indexes、ExecCGI 等。
  • AllowOverride:指定允许覆盖 Apache 配置的选项,如 FileInfo、AuthConfig、Limit 等。
  • Order:指定 Apache 的访问控制顺序,如 Allow、Deny、Satisfy 等。
  • Directory:指定 Apache 的目录访问控制,如 Require all granted。
    leInfo、AuthConfig、Limit 等。
  • Order:指定 Apache 的访问控制顺序,如 Allow、Deny、Satisfy 等。
  • Directory:指定 Apache 的目录访问控制,如 Require all granted。
  • VirtualHost:指定 Apache 的虚拟主机,包括 ServerName、DocumentRoot、ErrorLog、CustomLog 等。