Web 基础——Apache

本文详细解释了HTTP协议的工作原理,包括请求报文和响应报文结构,以及HTTP状态码的分类。同时介绍了Apache服务器的不同工作模式(如Prefork、Worker和Event)及其优化策略,以及如何配置和调整Apache服务器以适应高并发场景。
摘要由CSDN通过智能技术生成

HTTP:超文本传输协议是互联网上应用最为广泛的一种网络协议,协议的核心功能是传输 Web 服务器上的 HTML 页面及其它文件。

1)HTTP 请求报文和响应报文

HTTP 协议是一个应用层协议,其报文分为请求报文和响应报文。当客户端请求一个页面时,会先通过 HTTP 协议将请求的内容封装在 HTTP 请求报文之中,服务器收到该请求报文后根据协议规范进行报文解析,然后向客户端返回响应报文。

HTTP 报文结构为:

  • 起始行:对报文进行描述。

  • 头部:向报文中添加了一些附加信息,是一个名/只的列表,头部和协议配合工作,共同决定了客户端和服务器能做什么事情。

  • 主体:包含数据的主体部分。

5.HTTP 状态码


| 状态码 | 分类 |

| — | — |

| 100~199 | 信息性状态码 |

| 200~299 | 成功状态码 |

| 300~399 | 重定向状态码 |

| 400~499 | 客户端错误状态码 |

| 500~599 | 服务器端错误状态码 |

常见状态码:

  • 200:正常请求(OK)

  • 301:请求的页面永久跳转(Moved Permanently)

  • 302:临时跳转(Found)

  • 400:请求参数错误(Bad Request)

  • 401:账户密码错误(Authorization Required)

  • 403:权限被拒绝(Forbidden)

  • 404:文件未找到(Not Found)

  • 413:用户上传文件大小限制(Request Entity Too Large)

  • 502:网关错误(Bad Gateway)

  • 504:网关超时(Gateway Timeout)

6.Apache 特点


Apache 作为最早的 Web 服务程序,基于 HTTP 提供网页浏览服务;模块化设置、开放源代码、跨平台应用、支持多种 Web 编程语言、运行稳定。

1)三种工作模式

Apache 的核心模块叫多路处理模块 Multi-Processing Module,简称 MPM。

Prefork
  • 多进程模式,一个进程处理一个连接,每个进程相对来说都是独立的,这个过程会用到 Select (异步阻塞) 机制来通知;

  • 特点:稳定、响应快、消耗大量 CPU 和内存、不适用于高并发场景、Keep-Alive 长连接占据问题。

在这里插入图片描述

Worker
  • 多进程多线程模式,一个进程开多个线程、每一个线程处理一个连接,但通知机制还是 Select (异步阻塞) 不过可以接收更过的请求;

  • 特点:节省资源、兼容性不好、稳定性不高、适用于高并发场景、Keep-Alive 长连接占据问题。

在这里插入图片描述

Event
  • Worker 的升级版、把服务器进程和连接进行分析,基于异步 I/O 模型。

  • 请求过来后进程并不处理请求,而是直接交由其它机制来处理,通过 epoll 机制来通知请求是否完成;

  • 在这个过程中,进程本身一直处于空闲状态,可以一直接收用户请求。可以实现一个进程响应多个用户请求。

  • 并且 Event 模式对于 Keep-Alive 连接处理也有所优化,Event 模式由单独的线程处理 Keep-Alive 长连接,执行完毕后,又允许它释放。

  • 这样增强了高并发场景下的请求处理能力。

  • 特点:支持海量级高并发负载、消耗资源少、但其对 https 支持的不完美。

在这里插入图片描述

Keep-Alive 长连接:

  • TCP 连接在发送后将依然保持打开状态,于是浏览器可以继续通过相同的连接发送请求。

  • 保持连接节省了为每个请求建立新连接所需的时间,还节约了带宽。

  • 减少重复请求的次数,进而加快访问速度,实现长连接要客户端和服务端都支持长连接。

总结:

  • 不同模式效率不同,主要用来调优。使用 httpd -V | grep 'MPM' 可以查看当前使用模式。

二、部署 Apache 网站服务

===================================================================================

准备工作

| 主机名 | 操作系统 | IP地址 | 版本号 |

| — | — | — | — |

| Apache | CentOS 7.4 | 192.168.1.1 | httpd-2.2.17.tar.gz |

1.编译安装 Apache


  • 静态编译:将模块直接编译进 httpd 的核心中。静态编译的所有模块都会随着 httpd 的启动而启动。

  • 动态编译:将模块编译好,但不编译到 httpd 的核心中。要启动动态编译的模块,需要在配置文件中使用 LoadModule 指令加载。

[root@Apache ~]# wget http://archive.apache.org/dist/httpd/httpd-2.2.17.tar.gz

[root@Apache ~]# tar zxf httpd-2.2.17.tar.gz -C /usr/src/

[root@Apache ~]# cd /usr/src/httpd-2.2.17/

[root@Apache httpd-2.2.17]# ./configure \

–prefix=/usr/local/httpd \

–enable-so \

–enable-rewrite \

–enable-cgi && make && make install

注解:

  • --enable-so:开启动态加载模块的功能。

  • --enable-rewrite:开启地址重写、重定向功能。

  • --enable-cgi:开启与一些动态编程语言之间进行交互的接口。

在这里插入图片描述

动态编译:

./configure \

–prefix=/usr/local/httpd \

–enable-so \

–enable-modules=most \

–enable-mpms-shared=all && make && make install

  • 注意:本次实验并不需要做动态编译。

查看模块

/usr/local/httpd/bin/apachectl -D DUMP_MODULES # 会显示静态编译还是动态编译

2.安装后优化调整


[root@Apache httpd-2.2.17]# ln -s /usr/local/httpd/bin/* /usr/local/bin/ # 优化执行路径

[root@Apache ~]# httpd -v # 查看httpd版本

[root@Apache ~]# cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd # 复制启动文件

[root@Apache ~]# sed -i 1a’#chkconfig: 35 85 15’ /etc/init.d/httpd # 在第一行后面插入

[root@Apache ~]# chmod +x /etc/init.d/httpd # 添加可执行权限

[root@Apache ~]# chkconfig --add httpd # 添加为系统服务

[root@Apache ~]# chkconfig httpd on # 设置开机自启

[root@Apache ~]# systemctl start httpd # 开启httpd服务

[root@Apache ~]# netstat -anpt | grep 80 # 查看端口是否开启

在这里插入图片描述

3.使用浏览器访问验证


在这里插入图片描述

4.配置多个网页


[root@Apache ~]# cd /usr/local/httpd/htdocs/

[root@Apache htdocs]# rm -rf index.html

[root@Apache htdocs]# mkdir baidu

[root@Apache htdocs]# mkdir sina

[root@Apache htdocs]# echo “

www.baidu.com

” > baidu/index.html

[root@Apache htdocs]# echo “

www.sina.com

” > sina/index.html

在这里插入图片描述

使用浏览器访问验证:

在这里插入图片描述

解决方法:

[root@Apache ~]# vim /usr/local/httpd/conf/httpd.conf

将主配置文件中的:

144 Options Indexes FollowSymLinks

替换为:

144 Options FollowSymLinks

[root@Apache ~]# systemctl restart httpd # 重启httpd服务

[root@Apache ~]# netstat -anpt | grep 80 # 查看端口是否开启

在这里插入图片描述

使用浏览器访问验证:

在这里插入图片描述

5.调整工作模式


  • 注意:设置工作模式时,不仅要考虑网站的并发连接等工作效率,也要考虑服务器硬件占用情况,内存尤为重点考虑。

1)查看工作模式

[root@Apache ~]# httpd -V | grep ‘MPM’

在这里插入图片描述

2)Prefork 工作模式

| 参数 | 作用 |

| :-- | :-- |

| StartServers | 服务器启动时建立的子进程数量 |

| MinSpareServers | 空闲子进程最小数量,当空闲子进程数小于该数值将产生新的子进程 |

| MaxSpareServers | 空闲子进程最大数量,当空闲子进程数大于该数值将杀死多余子进程 |

| MaxClinets | 限制用户最大并发数 |

| MaxRequestsPerChild | 每个子进程在其生存期内允许处理的最大请求数量 |

[root@Apache ~]# vim /usr/local/httpd/conf/extra/httpd-mpm.conf

36

37 StartServers 5

38 MinSpareServers 5

39 MaxSpareServers 20

40 MaxClients 150

41 MaxRequestsPerChild 10000

42

[root@Apache ~]# vim /usr/local/httpd/conf/httpd.conf

将主配置文件中的:

370 #Include conf/extra/httpd-mpm.conf # 去掉注释

替换为:

370 Include conf/extra/httpd-mpm.conf

[root@Apache ~]# systemctl restart httpd # 重启httpd服务

[root@Apache ~]# netstat -anpt | grep 80 # 查看端口是否开启

在这里插入图片描述

3)Worker 工作模式

| 参数 | 作用 |

| :-- | :-- |

| StartServers | 服务器启动时建立的子进程数量 |

| MinSpareServers | 空闲子线程最少数量,当空闲子线程数量少于该数值将产生新的子线程 |

| MaxSpareServers | 空闲子线程最大数量,当空闲子线程数量大于该数量将杀死多余子线程 |

| MaxClients | 限制用户最大并发数 |

| MaxRequestsPerChild | 每个子进程在其生存期内允许处理的最大请求数量 |

[root@Apache ~]# vim /usr/local/httpd/conf/extra/httpd-mpm.conf

51

52 StartServers 2

53 MaxClients 150

54 MinSpareThreads 25

55 MaxSpareThreads 75

56 ThreadsPerChild 50

57 MaxRequestsPerChild 10000

58

切换到 Worker 工作模式

[root@Apache ~]# systemctl stop httpd

[root@Apache ~]# cat /usr/local/httpd/build/config.nice # 查看之前安装httpd的配置信息

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

核心竞争力,怎么才能提高呢?

成年人想要改变生活,逆转状态?那就开始学习吧~

万事开头难,但是程序员这一条路坚持几年后发展空间还是非常大的,一切重在坚持。

为了帮助大家更好更高效的准备面试,特别整理了《前端工程师面试手册》电子稿文件。

前端面试题汇总

JavaScript

性能

linux

前端资料汇总

完整版PDF资料免费分享,只需你点赞支持,动动手指点击此处就可领取了

前端工程师岗位缺口一直很大,符合岗位要求的人越来越少,所以学习前端的小伙伴要注意了,一定要把技能学到扎实,做有含金量的项目,这样在找工作的时候无论遇到什么情况,问题都不会大。

png)

JavaScript

性能

linux

前端资料汇总

完整版PDF资料免费分享,只需你点赞支持,动动手指点击此处就可领取了

前端工程师岗位缺口一直很大,符合岗位要求的人越来越少,所以学习前端的小伙伴要注意了,一定要把技能学到扎实,做有含金量的项目,这样在找工作的时候无论遇到什么情况,问题都不会大。

  • 15
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值