http

HTTP

TCP/IP体系结构

层级 作用
网络接口层(Link) 用来处理连接网络的物理设备
网际层(Internet) 处理在网络上流动的数据包
运输层(Transport) 负责向两个主机进程之间的通信提供通用的数据传输服务 (TCP、UDP)
应用层(Application) 通过应用进程简的交互来完成特定的网络应用。(HTTP、DNS)

HTTP协议介绍

HTTP(HyperText Transfer Protocol,超文本传输协议)用于实现Web服务器与HTTP客户端交换数据的一种实现方式。

Unknown

HTTP响应流程

1、建立连接

接收或拒绝连接请求

2、接收请求

接收客户端请求报文中对某资源的一次请求的过程

3、处理请求

服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理

4、访问资源

服务器获取请求报文中请求的资源web服务器,即存放了Web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源

5、构建响应报文

一旦Web服务器识别出了资源,就执行请求方法中描述的动作,并返回响应报文。响应报文中包含有响应状态码、响应首部,如果生成了响应主体的话,还包含响应主体。

6、发送响应报文

Web服务器通过连接发送数据时也会面临与接收数据一样的问题。服务器可能有很多条到各个客户端的连接,有些是空闲的,有些在向服务器发送数据,还有一些在向客户端回送响应数据。服务器要记录连接的状态,还要特别注意对持久连接的处理。对非持久连接而言,服务器应该在发送了整条报文之后,关闭自己这一端的连接。对持久连接来说,连接可能仍保持打开状态,在这种情况下,服务器要正确的计算Content-Length首部,不然客户端就无法知道响应什么时候结束了

7、记录日志

最后,当事务结束时,Web服务器会在日志文件中添加一个条目,来描述已执行的事务。

Web访问响应模型

  • 单进程I/O模型: 启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应
  • 多进程I/O模型:并行启动多个进程,每个进程响应一个连接请求
  • 复用I/O结构:启动一个进程,同时响应N个连接请求。
  • 复用的多进程I/O模型:启动M个进程,每个进程响应N个连接请求,同时接受M*N个请求

Apache

Httpd介绍

20世纪90年代初,NCSA(National Center for Supercomputing Applications,国家超级电脑应用中心)开发。1995年开源社区发布Apache(a patchy server),后来,随着软件的发展,逐步成为ASF(Apache Software Foundation,Apache 软件基金会)

Httpd特性

  • 高度模块化:Core + Modules

  • DSO:Dynamic Shared Object 动态加/卸载

  • MPM:Multi-processing module. 多路处理模块,在MPM中,有三种工作模式:

    prefock:多进程I/O模型,每个进程响应一个请求,默认模型。相当于Web访问响应模型中的多进程I/O模

    在Cent OS6中,最大的进程数为2080(可用ulimit -a来查看),当然喽,这个值也是可以修改的啦!这样的话,当用户访问量变多时,这种模型就不适用了。

    worker:复用的多进程I/O模型,多进程多线程,IIS使用此模型

    event:事件驱动模型(worker模型的变种):一个主进程:生成M个子进程,每个进程直接响应N个请求:M*N ,有专门的线程来管理这些Keep-alive类型的线程,当有真实请求时,将请求传递给服务线程,执行完毕后,又允许释放。这样增强了高并发场景下的请求处理能力。

Httpd使用

Environment:Cent OS6

Version 2.2.15

1、安装httpd
	# yum -y install httpd
2、查看httpd服务配置文件
	# rpm -ql httpd
		  配置文件:修改完配置文件可用 'httpd -t' 检查配置文件语法
				/etc/httpd/conf/httpd.conf
				/etc/httpd/conf.d/*.conf
          服务脚本:
          		/etc/rc.d/init.d/httpd
          服务脚本配置文件:
          		/etc/sysconfig/httpd
          			PIDFILE=/var/run/httpd/httpd.pid --- 主进程进程号
          主程序文件:
          		/usr/sbin/httpd
          		/usr/sbin/httpd.event
				/usr/sbin/httpd.worker
		  日志文件目录:
		  		/var/log/httpd
		  			access_log: 访问日志
					error_log:错误日志
		  站点文档目录:
		  		/var/www/html
		  模块文件路径:
		  		/usr/lib64/httpd/modules
		  帮助文档包:
		  		httpd-manual
3、启动httpd服务:
	# service httpd start
4、查看端口号是否已打开:--- 此时80端口已打开
	# ss -ntlp	-- 此时80端口已打开,可以访问http://172.16.11.88
5、测试httpd连接: --- 默认httpd服务路径为/var/www/html
	# mkdir /var/www/html/do
	# echo "tocky is a boy" > /var/www/html/do/qu.html
	# telnet 172.16.11.88 80
	GET /do/qu.html http/1.1	
	host:172.16.11.88
6、启用httpd-manual
	# yum -y install httpd-manual
	# servcie httpd reload
	# http://172.16.11.88/manual/	---此时便可通过浏览器正常访问帮助文档内容。
7、httpd常见配置:
	服务器辨识主机名和端口号
		ServerName www.example.com
	配置Web Server的响应头部
		ServerTokens Prod  
	配置Web Server的响应头部
		Listen 172.16.11.77:80
	持久连接(Persistent Connection):连接建立,每个资源获取完成后不会断开连接,而是继续等待其他的请求完成。默认关闭持久连接
		KeepAlive Off	--- 默认是关闭的
		MaxKeepAliveRequests 100	--- 最大的连接请求次数
		KeepAliveTimeout 15	--- 连接超时时间
	MPM(Multi-Processing Module,多路处理模块)
		# httpd -l	--- 系统当前加载的静态模块
		# http -m	--- 系统加载的所有模块,包括动态模块
	默认加载的模块
		LoadModule auth_basic_module modules/mod_auth_basic.so	
	网站主页路径配置:
		DocumentRoot "/var/www/html"
8、将系统默认模块prefock修改为
	# vim /etc/sysconfig/httpd 	--- 修改服务脚本配置文件httpd.worker为
		HTTPD=/usr/sbin/httpd.worker
	# service httpd restart	--- 重启服务后生效
	# httpd.worker -l	--- 查看worker模块
	# yum -y install httpd-tools  --- 安装httpd-toos工具,ab工具可以测试性能,集成在httpd-tools
	# ab -c 1000 -n 10000 http://172.16.11.88/	--- 测试worker模块性能。
9、站点访问控制
	# vim  /etc/httpd/conf/httpd.conf 
		<Directory "/var/www/icons">
    	Options Indexes MultiViews FollowSymLinks
    	AllowOverride None
    	Order allow,deny
    	Allow from all
		</Directory>
10、日志设定:
	# vim  /etc/httpd/conf/httpd.conf 
		ErrorLog logs/error_log
		LogLevel warn	--- 错误级别,不同级别日志记录详细度不一样。
		LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined	--- 日志格式定义,
11、基于用户的访问控制
	客户端用户填入账号和密码后再次发送请求报文;认证通过时,则服务器发送响应的资源。使用专用命令完成此类文件的创建及用户管理
	htppasswd [options] /PATH/HTTP_PASSWD_FILE username
		-c: 自动创建文件,仅应该在文件不存在时使用
		-m: md5格式加密
		-s: sha格式加密
		-D: 删除指定用户
	1、 创建httpd账号
		# htpasswd -c /etc/httpd/conf.d/httpd_users tocky 	--- 指定用户密码为tocky
	2、创建文件夹:
		# mkdir /var/www/html/do
	3、针对用户tocky启用文件夹/var/www/html/do的用户验证
		# vim /etc/httpd/conf/httpd.conf 
			<Directory /var/www/html/do>
			authtype basic
			authname "tocky"
			authuserfile "/etc/httpd/conf.d/httpd_users"
			require user tocky
			</Directory>
	 	# service httpd restart
	 	# httpd://172.16.11.88/do/	--- 此时访问/var/www/html/do需要用户验证。
12、虚拟主机:一台主机上配置多个网站
	基于IP的虚拟主机
	基于Port的虚拟主机
posted @ 2017-08-07 11:22  北方有木名为栖  阅读(219)  评论(0)    收藏  举报