http是一种网络传输协议,即超文本传输协议

    之所以称之为超文本是因为此协议既可以传输普通的文本信息还可以传输图片、音频、视频等非文本信息;

    使用TCP协议的80端口建立连接,即可靠的无状态连接;

    一般采用HTML、CSS、JS等语言编写代码;

    版本更迭  0.9---1.0---1.1---2.0,1.1是目前主流


URI  统一资源标识符

URL 统一资源定位符


流量统计

    IP    独立ip

    PV    页面访问,即页面刷新量

    UV    独立访客,通过cookies计算访客终端的数量


http的工作机制

    http request

    http response


web资源  一个web页面并不是单个资源而是一组资源的集合

    静态资源  访问速度快,资源消耗少

        文件后缀:.jpg, .html, .txt, .js, .css, .mp3, .avi

    动态资源 访问速度慢,资源消耗多,所以常常结合缓存来解决

        文件后缀:.asp, .php, .jsp

 

下面来阐述一次完整的http请求处理过程

    1、建立连接:客户端发出http request与服务端建立tcp连接,或成功或失败

    2、接收请求:服务端接收客户端请求方法中对某一资源的请求

    3、处理请求:服务器对请求报文进行解析,根据请求方法、资源、首部等信息进行处理

        常见的http请求方法(method):GET、POST、HEAD、PUT、PUSH、OPTIONS、DELETE、TRACE

    4、访问资源:服务端向web资源服务器请求静态资源或者动态程序运行后生成的资源

    5、构建响应报文:web资源服务器响应请求,执行响应动作,并返回相应报文。响应报文中包含状态码和响应主体;

    6、发送响应报文:也是在tcp连接的基础上,服务端会告诉客户端数据是什么格式,用Content-Type表示

        常见的Content-Type值  text/xml、image/jpeg、audio/mp3

    7、记录日志


本文讲的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

建议修改配置文件前先备份,方便回退,养成这种习惯

1、服务版本信息

ServerTokens Prod  隐藏apache版本

ServerTokens OS  默认设置,显示apache版本,安全起见建议隐藏

httpd -t  用于httpd配置文件的语法检查

我们修改完httpd的配置文件后,可以使用此命令检查语法是否有问题

2、修改监听的IP和端口

Listen 80  默认设置,监听本机所有ip的80端口,可根据自己的需要修改

仅企业内部使用时可以修改为非标准端口,而且可以同时监听多个端口

3、持久连接

每个请求获取完资源后不会断开连接,而是等待下一个请求的完成。默认是关闭持久连接功能的

KeepAlive Off   默认是关闭持久连接的

KeepAliveTimeout 15  一个连接中等待同一客户端下次请求的超时时间,单位是秒

MaxKeepAliveRequests 100  一次持久连接能接受的最大请求数

根据业务需求决定是否启用持久连接,建议游戏业务开启持久连接

4、MIME 多用途互联网邮件扩展

服务器在响应客户端时会扫描每个资源内容,根据其魔数字与已知模式匹配来确定响应资源文件的类型

比如,服务端响应资源a.jpg是一张图片,如果将图片文件a.jpg修改为a,则依据MIME扫描资源内容得出魔数字依然能够判断出资源类型是图片

所以说MIME是依据资源内容而不是后缀来判断文件类型

5、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自带的压力测试工具

6、DSO 动态共享模块

通过加载特定模块完成特定功能,如下

LoadModule auth_basic_module modules/mod_auth_basic.so  加载认证模块,即http可以基于此模块实现认证

7、文档页面路径

 DocumentRoot "/var/www/html"   默认的网站主页路径,即根目录

当访问http://www.a.com/test/index.html时,服务端的路径是/var/www/html/test/index.html

8、定义站点主页面

DirectoryIndex index.html index.html.var  默认主页,如果找不到此文件就会报错

9、站点访问控制常见机制

可基于客户端来源地址和账号这两种机制实现访问控制

开可以基于目录、文件、通配模式或者URL来实现访问控制,后续介绍

10、<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>

11、日志设定

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的值