linux第九周微职位

1、请描述一次完整的http请求处理过程;

HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤:

  1. 建立TCP连接

    在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能进行更高层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80;

  2. Web浏览器向Web服务器发送请求命令

    一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令。例如:GET/sample/hello.jsp HTTP/1.1;

  3. Web浏览器发送请求头信息

    浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。

  4. Web服务器应答

    客户机向服务器发出请求后,服务器会客户机回送应答, HTTP/1.1 200 OK ,应答的第一部分是协议的版本号和应答状态码;

  5. Web服务器发送应答头信息

    正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档;

  6. Web服务器向浏览器发送数据

    Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据;

  7. Web服务器关闭TCP连接

一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者       服务器在其头信息加入了这行代码:Connection:keep-alive;

TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接       节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

2、httpd所支持的处理模型有哪些,他们的分别使用于哪些环境。

Apache有两种工作模型,一种是基于进程的preforker模型,一种是基于线程和进程混合的Worker模型

1)prefork模式

prefork模式可以算是很古老但是非常稳定的Apache模式。Apache在启动之初,就预先fork一些子进程,然后等待请求进来。之所以这样做,是为了减少频繁创建和销毁进程的开销。每个子进程只有一个线程,在一个时间点内,只能处理一个请求;

优点:成熟稳定,兼容所有新老模块。同时,不需要担心线程安全的问题。(我们常用的mod_php,PHP的拓展不需要支持线程安全);

缺点:一个进程相对占用更多的系统资源,消耗更多的内存。而且,它并不擅长处理高并发请求,在这种场景下,它会将请求放进队列中,一直等到有可用进程,请求才会被处理。

2)worker模式

worker模式比起上一个,是使用了多进程和多线程的混合模式。它也预先fork了几个子进程(数量比较少),然后每个子进程创建一些线程,同时包括一个监听线程。每个请求过来,会被分配到1个线程来服务。线程比起进程会更轻量,因为线程通常会共享父进程的内存空间,因此,内存的占用会减少一些。在高并发的场景下,因为比起prefork有更多的可用线程,表现会更优秀一些。

有些人会觉得奇怪,那么这里为什么不完全使用多线程呢,还要引入多进程?

原因主要是需要考虑稳定性,如果一个线程异常挂了,会导致父进程连同其他正常的子线程都挂了(它们都是同一个进程下的)。为了防止这场异常场景出现,就不能全部使用线程,使用多个进程再加多线程,如果某个线程出现异常,受影响的只是Apache的一部分服务,而不是整个服务。

优点:占据更少的内存,高并发下表现更优秀。

缺点:必须考虑线程安全的问题,因为多个子线程是共享父进程的内存地址的。如果使用keep-alive的长连接方式,某个线程会一直被占据,也许中间几乎没有请求,需要一直等待到超时才会被释放。如果过多的线程,被这样占据,也会导致在高并发场景下的无服务线程可用。

3)EVENT模式

这个是Apache中最新的模式,在现在版本里的已经是稳定可用的模式。它和worker模式很像,最大的区别在于,它解决了keep-alive场景下,长期被占用的线程的资源浪费问题(某些线程因为被keep-alive,空挂在哪里等待,中间几乎没有请求过来,甚至等到超时)。event

MPM中,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样增强了高并发场景下的请求处理能力。

3、源码编译安装LAMP环境(基于wordpress程序),并写出详细的安装、配置、测试过程。

时间: 2024-12-19 11:38:52

linux第九周微职位的相关文章

linux第九周总结

linux学习第九周总结 本周的内容重中之重,数据库MySQL, 一.简介 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件. MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,

linux第五周微职位

1.请描述网桥.集线器.二层交换机.三层交换机.路由器的功能.使用场景与区别. 1)集线器: 集线器(Hub)是指将多条以太网双绞线或光纤集合连接在同一段物理介质下的设备,主要功能是对接收到的信号进行放大,以扩大网络的传输距离,工作于OSI(开放系统互联参考模型)参考模型第一层,即"物理层". 集线器是一个多端口的中继器,只负责节点间数据的传递和信号的放大处理,检测冲突但不负责解决阻塞问题,所有端口处于同一个冲突域下.与二层设备如二层交换机区别在于不像交换机一样每个端口分隔冲突域,不具

Linux第七周微职位

1.写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin):分别这两类用户的个数:通过字符串比较来实现: 1)创建文件     ]# vim usershells.sh #!/bin/bash # check current system all users is its login shells # declare -i nologin_num=0 declare -i login_num=0 for i in $( cut -

Linux第十周微职位

1.建立samba共享,共享目录为/data,要求:(描述完整的过程) 1)共享名为shared,工作组为magedu: 2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组:密码均为用户名: 3)添加samba用户gentoo,centos和ubuntu,密码均为"mageedu": 4)此samba共享shared仅允许develop组具有写权限,其他用户只能以只读方式

linux第六周微职位

1.请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情) 1)加电自检,BIOS启动引导阶段: 在该过程中实现硬件的初始化以及查找启动介质: 从MBR中装载启动引导管理器(GRUB)并运行该启动引导管理: 2)GRUB启动引导阶段: 装载stage1 装载stage1.5 装载stage2 读取/boot/grub.conf文件并显示启动菜单: 装载所选的kernel和initrd文件到内存中 3)内核阶段: 运行内核启动参数: 解压initrd文件并挂载initd文件系统,装

Linux第十一周微职位

系统的INPUT和OUTPUT默认策略为DROP: 1.限制本地主机的web服务器在周一不允许访问:新请求的速率不能超过100个每秒:web服务器包含了admin字符串的页面不允许访问:web服务器仅允许响应报文离开本机: ]# iptables -A INPUT -p tcp --dport 80 -mtime ! --weekdays Mon -m connlimit --connlimit-above 100 -j ACCEPT ]# iptables -A OUTPUT  -p tcp 

第十四,十五周微职位

1.搭建一套自动以运维工具Cobbler系统: 一.PXE 简述及介绍 预启动执行环境(Preboot eXecution Environment,PXE,也被称为预执行环境)是让计算机通过网卡独立地使用数据设备(如硬盘)或者安装操作系统.PXE当初是作为Intel的有线管理体系的一部分,Intel和 Systemsoft于1999年9月20日公布其规格(版本2.1).通过使用像网际协议(IP).用户数据报协议(UDP).动态主机设定协定(DHCP).小型文件传输协议(TFTP)等几种网络协议和

Linux 第九周上课笔记(2)高速DNS

高速dns的设定 1.环境的部署 开启两台虚拟机,一台作为客户端,另一台作为服务器 #服务器端 yum install bind -y#安装软件 systemctl status named#查看状态 systemctl start named#开启named服务,默认状态下是关闭的 小细节:在启动这项服务时会卡,这时候需要你随机移动鼠标,和敲击键盘,这个作用是随机抓取你的动作,来生成密钥.执行:cat /etc/rndc.key 这个命令可以查看到生成的过程. systemctl enable

Linux第九周

1.写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin):分别这两类用户的个数:通过字符串比较来实现: #!/bin/bash awk -F: '$NF~"/sbin/nologin" {shell++} $NF!~"/sbin/nologin" {noshell++} END{printf "shell: %d \t noshell: %d \n",shell,noshell}