http是一种网络传输协议,即超文本传输协议php
之因此称之为超文本是由于此协议既能够传输普通的文本信息还能够传输图片、音频、视频等非文本信息;
css
使用TCP协议的80端口创建链接,便可靠的无状态链接;
html
通常采用HTML、CSS、JS等语言编写代码;
web
版本更迭 0.9---1.0---1.1---2.0,1.1是目前主流
apache
URI 统一资源标识符缓存
URL 统一资源定位符安全
流量统计服务器
IP 独立ipcookie
PV 页面访问,即页面刷新量网络
UV 独立访客,经过cookies计算访客终端的数量
http的工做机制
http request
http response
web资源 一个web页面并非单个资源而是一组资源的集合
静态资源 访问速度快,资源消耗少
文件后缀:.jpg, .html, .txt, .js, .css, .mp3, .avi
动态资源 访问速度慢,资源消耗多,因此经常结合缓存来解决
文件后缀:.asp, .php, .jsp
下面来阐述一次完整的http请求处理过程
一、创建链接:客户端发出http request与服务端创建tcp链接,或成功或失败
二、接收请求:服务端接收客户端请求方法中对某一资源的请求
三、处理请求:服务器对请求报文进行解析,根据请求方法、资源、首部等信息进行处理
常见的http请求方法(method):GET、POST、HEAD、PUT、PUSH、OPTIONS、DELETE、TRACE
四、访问资源:服务端向web资源服务器请求静态资源或者动态程序运行后生成的资源
五、构建响应报文:web资源服务器响应请求,执行响应动做,并返回相应报文。响应报文中包含状态码和响应主体;
六、发送响应报文:也是在tcp链接的基础上,服务端会告诉客户端数据是什么格式,用Content-Type表示
常见的Content-Type值 text/xml、image/jpeg、audio/mp3
七、记录日志
本文讲的http是由apache提供的httpd服务器程序
httpd的特色
高度模块化:core + modules
DSO:支持动态加载/卸载
MPM:多路处理模块
MPM主要定义了httpd程序运行时进程的工做模式
prefork
一个主进程生成n个work子进程,每一个子进程处理一个请求,,并发响应是n,至关稳定
worker
一个主进程生成m个子进程,每一个子进程生成n个线程,每一个线程处理一个请求,并发响应是m*n
event
与worker同样,但会单独分出一些线程来管理处理请求的线程,即将请求传递给服务线程,处理结束又容许释放。
http-2.2上此版本处于测试阶段,http-2.4此版本已经是稳定版
下述说明均在CentOS6.9上的http-2.2版本常见配置
编辑httpd的主配置文件/etc/httpd/conf/httpd.conf
建议修改配置文件前先备份,方便回退,养成这种习惯
一、服务版本信息
ServerTokens Prod 隐藏apache版本
ServerTokens OS 默认设置,显示apache版本,安全起见建议隐藏
httpd -t 用于httpd配置文件的语法检查
咱们修改完httpd的配置文件后,可使用此命令检查语法是否有问题
二、修改监听的IP和端口
Listen 80 默认设置,监听本机全部ip的80端口,可根据本身的须要修改
仅企业内部使用时能够修改成非标准端口,并且能够同时监听多个端口
三、持久链接
每一个请求获取完资源后不会断开链接,而是等待下一个请求的完成。默认是关闭持久链接功能的
KeepAlive Off 默认是关闭持久链接的
KeepAliveTimeout 15 一个链接中等待同一客户端下次请求的超时时间,单位是秒
MaxKeepAliveRequests 100 一次持久链接能接受的最大请求数
根据业务需求决定是否启用持久链接,建议游戏业务开启持久链接
四、MIME 多用途互联网邮件扩展
服务器在响应客户端时会扫描每一个资源内容,根据其魔数字与已知模式匹配来肯定响应资源文件的类型
好比,服务端响应资源a.jpg是一张图片,若是将图片文件a.jpg修改成a,则依据MIME扫描资源内容得出魔数字依然可以判断出资源类型是图片
因此说MIME是依据资源内容而不是后缀来判断文件类型
五、MPM 多路处理模块
httpd -l 查看当前使用的模块,默认是prefork模式
/etc/sysconfig/httpd 此文件能够修改MPM的工做模式,http-2.2版本保持默认便可
下面对主配置文件中的prefork模式说明
<IfModule prefork.c>
StartServers 8 开启http服务时启动的服务进程数
MinSpareServers 5 空闲状态下存在的最少进程数
MaxSpareServers 20 空闲状态下存在的最多进程数
ServerLimit 256 最多进程数
MaxClients 256 最大并发数
MaxRequestsPerChild 4000 每一个子进程能处理的最大的请求数,超过此值子进程会被父进程终止并释放内存空间
</IfModule>
ab -c 100 -n 1000 http://192,168.100.5/index.html httpd自带的压力测试工具
六、DSO 动态共享模块
经过加载特定模块完成特定功能,以下
LoadModule auth_basic_module modules/mod_auth_basic.so 加载认证模块,即http能够基于此模块实现认证
七、文档页面路径
DocumentRoot "/var/www/html" 默认的网站主页路径,即根目录
当访问http://www.a.com/test/index.html时,服务端的路径是/var/www/html/test/index.html
八、定义站点主页面
DirectoryIndex index.html index.html.var 默认主页,若是找不到此文件就会报错
九、站点访问控制常见机制
可基于客户端来源地址和帐号这两种机制实现访问控制
开能够基于目录、文件、通配模式或者URL来实现访问控制,后续介绍
十、<directory>中基于源地址的访问控制
(1)options 其后能够用跟多个列表选项
indexes 指定URL路径下不存在文件资源时则返回资源列表,不建议使用
followsymlinks 容许访问软链接指向的源文件,默认是启用的
none 表示所有拒绝
all 表示所有容许
示例以下
<directory /var/www/html/aaa>
Options -indexes -followsymlinks
</directory>
+ 表示启用列表选项
- 表示禁用列表选项
(2)allowoverride
哪些指令能够放在 .htaccess 文件中,覆盖以前的配置指令,以下例
cat /var/www/html/aaa/.htaccess
Options indexes
#在指定目录下生成.htaccess文件,并设置好options选项
cat /etc/httpd/conf.d/test.conf
<directory /var/www/html/aaa>
allowoverride all 容许.htaccess文件覆盖此处的全部指令,至关于options indexes
</directory>
注意
allowoverride none 则.htaccess文件无效
allowoverride indexes 只覆盖indexes指令,其余指令不覆盖,即此处的indexes将被.htaccess文件中定义的指令替代
(3)order和allow、deny
order指定allow和deny的优先级,靠后的优先级高,即order allow,deny则deny优先级高,order deny,allow则allow优先级高
order指定优先级顺序,而后使用allow from或者deny from来匹配具体地址,若是allow与deny有重合,则按照order定义的优先级取舍
cat test.conf
<directory /var/www/html/aaa>
<files "a.html">
order allow,deny deny优先级高于allow
deny from 192.168.100.100
allow from 192.168 allow定义的地址与deny定义的地址有重合,以order定义的优先级顺序作取舍
</files>
</directory>
十一、日志设定
ErrorLog logs/error_log 错误日志
CustomLog logs/access_log combined 访问日志,combined定义日志格式
两种类型的日志存放位置使用相对路径,即相对ServerRoot "/etc/httpd"
日志格式定义以下
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
%h 远程主机,%l 远程用户,%u 验证远程用户,%t服务器接收请求的时间,%r请求报文的首行,包含了请求方法,%>s状态响应码
%b响应报文大小,%{Referer}i 请求报文首部referer的值,请求报文中user-agent的值