HTTP
TCP/IP体系结构
层级 | 作用 |
---|---|
网络接口层(Link) | 用来处理连接网络的物理设备 |
网际层(Internet) | 处理在网络上流动的数据包 |
运输层(Transport) | 负责向两个主机进程之间的通信提供通用的数据传输服务 (TCP、UDP) |
应用层(Application) | 通过应用进程简的交互来完成特定的网络应用。(HTTP、DNS) |
HTTP协议介绍
HTTP(HyperText Transfer Protocol,超文本传输协议)用于实现Web服务器与HTTP客户端交换数据的一种实现方式。
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的虚拟主机