第十周学习内容:HTTPD

第十周作业:

1、Centos7系统下实现httpd的安装,并分别实现prefork、worker、event等几种工作方式。

      http协议接受请求的模型可以分为单进程I/0模型,启动一个进程处理一个用户的请求,这意味着一次只能处理一个请求,多个请求将被串行响应,这种模型已基本被淘汰;多进程I/O模型,由父进程并行启动多个子进程,每个子进程响应一个请求,对应于prefork;复用I/O模型,一个进程响应n个请求;多线程模型:一个进程生成多个线程,一个线程处理一个请求;事件驱动模型:一个进程基于不同的事件直接响应多个请求,对应于event;复用的多进程I/O模型,一个父进程生成m个子进程,每个子进程再生成n个线程,每个线程响应一个请求,并发响应数量为m*n,对应于worker。

      http协议的具体实现有httpd这款程序,其中有一大特点就是MPM多路处理模块,可以在多种工作模式下切换:prefork对应多进程I/O模型,为了提升效率,会预先生成几个空闲进程,随时等待用户请求;worker对应复用多进程I/O模型,三级管理结构,父进程——子进程——线程,响应数量m*n;event对应事件驱动模型,比较新的一个工作模式。

      httpd基于base仓库即能安装,基础包为httpd.x86_64,开发工具为httpd-devel.x86_64,测试工具为httpd-tools.x86_64,帮助手册为httpd-manual.noarch。

      image.png

      httpd2.2和2.4有一大区别就是2.2只支持编译时选择使用哪种工作模式,而2.4是可以随意更换的,只需在配置文件中修改,再重启服务就可以了。编辑/etc/httpd/conf.modules.d/00-mpm.conf配置文件,默认是加载的prefork工作模式,想换成其他的只要在现在用的工作模式前加“#”表示注释,再把想使用的工作模式前的“#”去掉就可以了。

      image.png

      配置文件中除了对于使用哪个工作模式有配置外,还有对于此工作模式的相关配置,可以在主配置文件中添加,也可以单独列出放在/etc/httpd/conf.d目录下。使用<IfModule 工作模式.c>。。。</IfModule>上下文将配置指令框起来,让其在加载此工作模式时生效,主要会用到的指令有:startservers,创建多少个空闲子进程;minspareservers,最小空闲子进程;maxspareservers,最大空闲子进程;serverlimit或maxclients,最大子进程数也就是并发请求数量;maxrequestperchild,一个子进程最多处理多少个请求会自动消灭,0表示无限制。生产环境中一般使用prefork的较多。

      加载了prefork工作模式,在/etc/httpd/conf.d目录下添加了一个单独的配置文件:

      image.png

      启动httpd服务后,立刻查看进程ps aux发现有一个子进程因为空闲被消灭了,最终剩下3个子进程:

      image.png

2、简述request报文请求方法和状态响应码 。

      http协议的工作方式是很简单的,一端请求,一端响应;一端发的是http request报文,一端回的是http response报文,这么一次报文交互就被称为一次http事务。在用户一次请求中得到的叫web资源,有静态资源,如.html、.jpg、.png等。这种资源无需服务器端做出额外处理,直接发送给用户即可;有动态资源,如.php.jsp等。这种资源是要在服务器上执行某程序并将执行结果发送给用户的。一个web页面中的资源可能有多个,每个资源都需要单独请求。

      一次完整的http事务服务器端处理过程:(1)建立或处理连接:接收或拒绝请求;(2)接受请求:接收来自网络上的主机请求报文中对某特定资源的一次请求过程;(3)处理请求:对请求报文进行分析,获取客户端请求的资源及请求方法等相关信息;(4)访问资源:从本地磁盘上获取请求报文中请求的资源;(5)构建响应报文:在资源外部加上响应报文首部;(6)发送响应报文;(7)记录日志。而对于客户端只要发送请求报文,等待响应就可以了。

      request报文格式:起始行,<method><request-url><version>,中间部分<HEADERS>,载核部分<entity-body>这一部分对于请求报文大多数的方法来说一般为空。method(方法)共有6种,GET:获取;PUT:上传;DELETE:删除;TRACE:追踪获取资源要经过哪些代理;OPTIONS:探测资源所支持的方法;HEAD:只要资源的首部信息。response报文格式:起始行,<version><status><reason-phase>,中间部分<HEAFERS>,载核部分<entity-body>。status(响应码)表示用预先报告的行为告诉客户这次申请是成功还是失败,常见的响应码,200:成功;301:请求的URL所指向的资源已删除,但在响应报文首部LOCATION字段标出了这个永久转移的位置;302与301类似,只是标出的是临时转移的位置;304:本地缓存过期后向服务器申请新资源,架设服务器资源发生了改变则回复200和新资源,如果未发生改变则会回复304表示并未过期;401:认证质询,让用户提供用户名和密码;403:认证失败,请求被禁止;404:无法找到请求的资源,not found;500:服务器内部错误;502:代理服务器从后台服务器得不到响应。总结下来就是4开头的是客户端问题,5开头的是服务器端问题。

      image.png

3、详细描述httpd虚拟主机、站点访问控制、基于用户的访问控制、持久链接等应用配置实例。

      虚拟主机:一台物理主机可服务于多个站点,用虚拟主机的方式方便管理且安全可靠。共有三种方法:多个IP地址,基于不同的IP地址区分;多个端口,基于不同的端口区分;多个主机名,基于不同的主机名区分。使用<virtualhost ip地址:端口>。。。</virtualhost>上下文将配置指令框起来,基于哪种方法区分,就在哪个上面标注出区别就行了。框内其他的定义与主配置没有区别。

      image.png

      image.png

      站点访问控制:httpd对于每一个被访问的路径都要做访问控制,不同意的坚决不能访问,所以配置指令最好是设在限制区域中,如:<directory 路径>。。。</directory>表示对于指定路径的访问做出的限制;<file 文件>。。。</file>表示对于指定文件;<filematch 模式>。。。</filematch>对于匹配到的文件;<location>。。。</location>对于指定URL等等。在限制区域内的配置指令一般有,require all granted表示允许所有主机访问;require all denied表示拒绝所有的访问,require ip X.X.X.X表示允许某台ip地址为多少的主机访问。对上面的虚拟主机进行配置,是www.xiaogou.com只允许某台主机访问,其他主机访问则会跳转到httpd的默认页面。

      image.png

      对于10.0.0.8主机无影响:

      image.png

      对于其他主机:

      image.png

      基于用户的访问控制:在站点访问控制中只涉及了基于IP地址和URL等的控制,很有可能被仿冒,但如果基于用户名和密码的话,安全性能会更上一个台阶,就可以使用基于用户的访问控制。开启此方法后,请求资源的流程就变成用户发送请求,服务器会返回认证质询要求用户提供用户名和密码,只有用户提供了正确的用户名和密码后,服务器才会发送资源。此访问控制的认证不依赖于本地的passwd或shadow,而是新建一个文本文件,为了能生成一个加密的认证用文本文件,httpd还提供了一个专用工具叫htpasswd。使用方法非常简单,只需要htpasswd+[选项]+文件+用户名,回车后在键入密码,自动就在指定位置生成了这么个认证文件,能用到的选项有-c:创建文件;-m:使用md5加密;-b:批量添加用户名和密码;-S:使用sha加密;-d:删除用户。当文件创建好,就可以在配置文件中将认证指定为该文件即可。

      image.png

      image.png

      image.png

      持久连接:用户请求某一网页,若其中包含了多个资源,基于每个资源都要建立TCP三次握手和四次断开是件非常不效率的事情,打开持久连接功能的话可以在只建立一次TCP连接的情况下获取多个资源,当然也要设置超时时间和最多获取资源去限制一下连接的时长,当这两个条件中满足任意一个,服务器端将直接断开连接。用法:keepalive on,打开持久连接,默认是关闭的;keepalive timeout XX,定义持久连接超时时长,时间以秒为单位;maxkeepaliverequest XX,定义资源请求数量限制。

      image.png