HTTP2.4详解(三)

简介:

第一部分:HTTP、HTTPS相关概念深入理解(状态码,header,ab,curl)
第二部分:HTTP2.4新特性介绍与安装


第一部分:HTTP、HTTPS相关概念深入理解(状态码,header,ab,curl)

一、HTTP协议介绍
1.URL:uniform Resource Location
    URL方案:schema
    服务器地址:ip:port
    资源路径:
    
    http://www.baidu.com:80/bbs/index.php

1
2
3
4
5
6
7
8
     基本语法:
         [schema]://[user]:[password]@:[port]/[path];[params]?[query]#[frag]
         params:接受的参数
             http://www.mt.com/bbs/hello;gender=f
         query:查询的参数
             http://www.mt.com/bbs/item.php?username=tom&title=abc //查询的内容
         frag:片段,打开页面后,直接定位到某个位置
             http://www.mt.com/index.html#ch_Boot-x86 //后面的就是frag


    相对URL:相对于当前路径获取下一个资源,不完整,一般是站内DocumentRoot内的文档
    绝对URL:绝对的路径,一般跨站使用
2.http协议无状态
    http0.9,http1.0[支持缓存薄弱,相对完善],http2.0
    http协议:无状态,每个资源都需要单独请求,每个页面可能有n个资源
        假如没有启用长连接的话,就必须每个资源3握手,4断开
        服务器无法持续追踪客户端来源 //因为总是会断开
        服务器无法识别第一个和第二个请求者是否是同一个人
    方案:
        cookie //追踪用户
        用户的第一次访问的时候,s(server)会发送一个唯一的随机数给c,唯一的标识用户信息,C保存该信息到本地,这叫做cookie
        c访问A和B使用的cookie是不同的,作用域不同
        后续访问的时候,需要同时发送该cookie
        ...
        胖cookie和瘦cookie
        也有其他方案,cookie用的比较多
        
        S基于session记录用户的访问行为,关联到cookie
3.http事务
    请求:request报文
    响应:response报文
    //一次http事务,就是一次请求一次响应
    报文语法格式:
        request报文:
            <method><request-URL><Version>
            <headers>
            
            <entity-body>
        response报文:
            <Version><status><reason-phrase>
            <headers>
            
            <entity-body>
    method:请求方法,c希望s对资源执行的动作
        GET,HEAD,POST //常见
    version:
        HTTP/[major].[minor]
    status:响应状态码
        三位数字:如200,302,404;标记请求过程中发生的情况
    reason-phrase:状态码所标记的状态的简要描述
    headers:首部,标记请求或者响应的属性,0+个首部
        每个请求或响应报文可包含任意个首部;每个首部都有其首部名称;后面跟一个冒号,而后跟上一个可选空格,接着是一个值
    entity-body:实体部分,请求就是请求报文,上传的话,就是上传的内容
        请求时附加的数据或响应时附加的数据
        
4.method方法 //c告诉s要做什么
    GET:从服务器获取一个资源 //获取页面的真个内容
    HEAD:只从服务器获取文档的响应首部 //只返回请求响应的部分,而不是整个的内容
    POST:向服务器发送要处理的数据,//提交表单内容等
    PUT:将请求的主体部分存储在服务器上;//上传文件
    DELETE:请求删除服务器上指定的文件
    TRACE:追踪,追踪一个报文从源到目标中间经过的代理服务器
    OPTIOINS:请求服务器返回对指定资源支持使用请求方法
    
    协议查看或分析的工具:
        tcpdump,tshark,wireshark
    
5.状态码//发生了什么事
    1xx:100-101,信息提示
    2xx:200-206,在使用,成功类信息
    3xx:300-305,重定向
    4xx:400-415,client错误类信息
    5xx:500-505,server错误类信息
    

1
2
3
4
5
6
7
8
9
10
     常用的状态码:
         200:成功,请求的所有数据通过响应报文的entity-body部分发送;OK
         301:永久重定向,moved-permanently请求的url指向的资源已经被删除;但在响应报文中通过首部location指明了资源现在所处的新位置
         302:临时重定向,与301类似,但在响应报文中通过location指明资源现在所处的临时位置    
         304:Not notify客户端发出了条件式请求,但服务器上的资源未曾发生变化,则通过响应此状态码告知    
         401:需要输入账号和密码认证方能访问资源:Unauthorized
         403:请求被禁止,forbidden
         404:服务器无法找到c请求的资源:Not Fount
         500:服务器内部错误 Internal Server Error
         502:代理s从后端s收到了一条伪响应;Bad Gateway //


    
6.headers        
    格式:    
        Name: Value //每行一个
        
        Accept-Ranges:bytes
        Age:4519611
        Cache-Control:max-age=315360000
        Content-Encoding:gzip
        Content-Length:2203
        Content-Type:text/css
        Date:Sun, 05 Mar 2017 02:39:32 GMT
    普通的分类://有的请求和响应报文都适用,有的则仅限请求使用
        通用首部:
        请求首部
        响应首部
        实体首部
        扩展首部
    1.通用首部
        Date: 请求/响应 报文的创建时间
        Conection: 连接状态或方式,keep-alive,close
        Via:经过的中间节点
        Cache-Control:缓存控制,
        Pragma:
    2.请求首部
        Accept:通过服务器自己可以接受的媒体类型
        Accept-Charset:可以接受字符集
        Accept-Encoding:可接受的编码格式,如gzip
        Accept-Language:接受的语言
        Client-IP
        Host:请求的服务器名称和端口
        Referer:包含的当前正在请求的资源的上一级资源;//有的页面是从一个页面中链接过来的
        User-Agent:客户端代理,浏览器类型
        
        条件式请求首部:
            Expect:
            If-Modify-Since:指定时间之后是否改变过,如果没有修改返回给我not-motify,否则返回内容
            If-Unmodfied-Since:
            If-None-Match:本地缓存中存储的文件的Etag标签是否与s的文档的tag不匹配
            If-Match://匹配的话,返回Match,否则返回新的
        安全请求首部:
            Authorization:向服务器发送认证信息,如账号密码
            Cookie:c向s发送cookie
            Cookie2:新版本
        代理请求首部:
            Proxy-Authorization:向代理服务器认证
            
    3.响应首部
        1.信息性:
            Age:响应持续时长
            Server:服务器程序软件名称和版本
        2.协商首部//某资源有多种表示方式时使用
            Accept-Ranges:服务器可接受的请求范围类型
            Vary:变化的,服务器查看的其它首部列表
    4.安全响应首部
        Set-Cookie:向客户端设置cookie
        Set-Cookie2:
        WWW-Authenticate:来自s对c的质询认证表单
    5.实体首部
        Allow:列出对此实体可使用的请求方法
        Location:告诉c真正的实体位于何处
        
        Content-Encoding:内容编码
        Content-Language
        Content-Length 实体的长度
        Content-Location 实体真正所处的位置
        Content-Type:主体的对象类型
        
    6.缓存相关:
            ETag:实体的扩展标签
            Expire:实体的过期时间
            Last-Modified:最后一次修改的时间
            
//进行负载均衡的时候,可以根据请求的方法和对象进行负载均衡
//追踪用户:使用cookie集合s的session实现
    
二、客户端工具和压缩
1.curl是基于URL语法在命令行方式下工作的文件传输工具
    它支持FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE及LDAP等协议。curl支持HTTPS认证,
    并且支持HTTP的POST、PUT等方法, FTP上传, kerberos认证,HTTP上传,代理服务器, cookies, 用户名/密码认证, 下载文件断点续传,上载文件断点续传, 
    http代理服务器管道( proxy tunneling), 甚至它还支持IPv6, socks5代理服务器,,通过http代理服务器上传文件到FTP服务器等等,功能十分强大。
    
MIME: major/minor,  image/png, image/gif
    curl  [options]  [URL...]
    //多用途互联网邮件扩展multipath internet mail extent
    
curl的常用选项:

1
2
3
4
5
6
7
8
9
10
11
     -A/--user-agent < string > 设置用户代理发送给服务器
     --basic 使用HTTP基本认证
     --tcp-nodelay 使用TCP_NODELAY选项
     -e/--referer < URL > 来源网址
     --cacert < file > CA证书 (SSL) //https的使用证书
     --compressed 要求返回是压缩的格式,在传输过程中是压缩的
     -H/--header < line >自定义首部信息传递给服务器
     -I/--head 只显示响应报文首部信息
     --limit-rate < rate > 设置传输速度
     -u/--user < user [:password]>设置服务器的用户和密码
     -0/--http1.0 使用HTTP 1.0


        
    100:curl -e "http://www.mt.com" 192.168.4.109
    100:curl -I 192.168.4.109 //这是一个head方法,不带参数,默认是get方法
    s:109:tail /var/log/httpd/access_log
    
另一个工具:elinks 
    elinks  [OPTION]... [URL]...
    -dump: 不进入交互式模式,而直接将URL的内容输出至标准输出; 
    没有显示多媒体的效果
wget,lftp等都可以
    
2.user/group
    指定以哪个用户的身份运行httpd服务进程;
    //ps aux |grep httpd 一个主进程的身份是root,其他都是apache
    //因为只有管理员能够注册使用小于1024的端口
        User apache
        Group apache
    //主控进程接受请求,分配一个worker进程    
        SUexec
                
3.使用mod_deflate模块压缩页面优化传输速度
适用场景:
    (1) 节约带宽,额外消耗CPU;同时,可能有些较老浏览器不支持;
    (2) 压缩适于压缩的资源,例如文件文件;
    //一般压缩只针对于文本,但是对mp3,音频或其他格式的,压缩没有什么大的效果
    httpd -M |grep def
    ===========================================================    
    SetOutputFilter DEFLATE //对资源类型做过滤,符合条件的才压缩

1
2
3
4
5
6
7
8
9
10
     # mod_deflate configuration
     # Restrict compression to these MIME types  //要过滤的类型
     AddOutputFilterByType DEFLATE text/plain             //文本类别中的plain,html,css等才会压缩
     AddOutputFilterByType DEFLATE text/html
     AddOutputFilterByType DEFLATE application/xhtml+xml
     AddOutputFilterByType DEFLATE text/xml
     AddOutputFilterByType DEFLATE application/xml
     AddOutputFilterByType DEFLATE application/x-javascript
     AddOutputFilterByType DEFLATE text/javascript
     AddOutputFilterByType DEFLATE text/css
1
2
3
4
5
6
7
8
9
10
11
     # Level of compression (Highest 9 - Lowest 1) //压缩级别
     DeflateCompressionLevel 9
      
     # Netscape 4.x has some problems.  //浏览器过滤,有的浏览器不支持压缩,或者提示client升级客户端
     BrowserMatch ^Mozilla/4  gzip-only-text/html
      
     # Netscape 4.06-4.08 have some more problems
     BrowserMatch  ^Mozilla/4\.0[678]  no-gzip
      
     # MSIE masquerades as Netscape, but it is fine
     BrowserMatch \bMSI[E]  !no-gzip !gzip-only-text/html


====================================================================        
测试:
    1.[100s]:curl -I http://192.168.4.109/index.html  //查看是否压缩
    2.vim httpd.conf ,添加到最后也可
        复制上面信息,除了注释
        [109]:httpd -t
        service httpd restart
    3.使用chrome F12
        响应报文首部:Content-Encoding:gzip    
    注:使用一个稍大的文件,修改后缀为.html才可以    
    
三、https相关概念
https, http over ssl //tcp:443
    http是文本格式的协议,但是https是二进制格式的
    
1.SSL会话的简化过程
    (1) 客户端发送可供选择的加密方式,并向服务器请求证书;
    (2) 服务器端发送证书以及选定的加密方式给客户端;
    (3) 客户端取得证书并进行证书验正:
        如果信任给其发证书的CA:
            (a) 验正证书来源的合法性;用CA的公钥解密证书上数字签名;
            (b) 验正证书的内容的合法性:完整性验正
            (c) 检查证书的有效期限;
            (d) 检查证书是否被吊销;
            (e) 证书中拥有者的名字,与访问的目标主机要一致;
    (4) 客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换;
    (5) 服务用此密钥加密用户请求的资源,响应给客户端;
    
    注意:[默认]SSL会话是基于IP地址创建;所以单IP的主机上,仅可以使用一个https虚拟主机;
    回顾几个术语:PKI,CA,CRL,X.509 (v1, v2, v3)
    
2.配置httpd支持https:
    (1) 为服务器申请数字证书;
        测试:通过创建私有CA发证书
            1.创建私有CA
            2.在服务器上创建证书签署请求
            3.CA认证
            
    (2) 配置httpd支持使用ssl,及使用的证书;
        # yum -y install mod_ssl
        配置文件:/etc/httpd/conf.d/ssl.conf
            DocumentRoot
            ServerName
            SSLEngine on //启用ssl引擎
            SSLProtocol all -SSLv2 //不支持sslv2

            SSLCertificateFile
            SSLCertificateKeyFile
            
    (3) 测试基于https访问相应的主机;
        # openssl  s_client  [-connect host:port] [-cert filename] [-CApath directory] [-CAfile filename]
示例:https实现
===============================================================================
    192.168.4.100:CA   192.168.4.109:https_server
    1.CA相关配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
         CA:cd /etc/pki/CA
             (umask 077;openssl genrsa -out private/cakey.pem 2048)
             openssl req -x509 -new -key private/cakey.pem -out cacert.pem -days 365
                 {CN,HN,ZZ,Ops,Ops,ca.mt.com,.}
             touch index.txt
             echo 01 > serial
         HTTP_S:cd /etc/httpd/ssl
             (umask 077; openssl genrsa -out httpd.key 2048)
             openssl req -new -key httpd.key -out httpd.csr -days 365 
             主机名:www.mt.com
         HTTP_S
              scp httpd.csr root@192.168.4.100:/tmp
         CA:
             openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt 
             scp certs/httpd.crt root@192.168.4.109:/etc/httpd/ssl/


        注:在named中修改对应记录
            www.mt.com    192.168.4.109
    2.配置SSL
        http_s:yum install mod_ssl

1
2
3
4
5
6
7
         vim ssl.conf
             DocumentRoot "/var/www/html"
             ServerName www.mt.com
             
             SSLCertificateFile /etc/httpd/ssl/httpd.crt
             SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
         httpd -t


        service httpd restart
        ss -tnl
    3.测试
        openssl s_client -connect www.mt.com:443 //出错,不能验证服务器端的证书,因为没有ca证书
        openssl s_client -connect www.mt.com:443 -CAfile /etc/pki/CA/cacert.pem     
            Get /index.html HTTP/1.1
            Host www.mt.com
            两个回车客获取信息
        复制cacert.pem安装到本地进行测试
            你的链接不是私密链接//使用ip和使用域名是不同的
        注:修改cakey.pem-->cakey.crt 安装[受信任的根证书颁发机构]--->显示物理存储区,-->注册表-然后安装即可
        https://www.mt.com/
        
    5.httpd自带的工具程序
        htpasswd:basic认证基于文件实现时,用到的账号密码文件生成工具;
        apachectl:httpd自带的服务控制脚本,支持start和stop;
        apxs:由httpd-devel包提供,扩展httpd使用第三方模块的工具;
        rotatelogs:日志滚动工具;
            access.log -->
                access.log, access.1.log  -->
                    access.log, acccess.1.log, access.2.log
                access.log第一次的时候滚动为access.1.log,第二次的时候变为access.2.log,...
                
        suexec:访问某些有特殊权限配置的资源时,临时切换至指定用户身份运行;
        ab: apache bench 压力测试
                
3.httpd的压力测试工具
        ab, webbench, http_load, seige
        jmeter, loadrunner
        tcpcopy:网易,复制生产环境中的真实请求,并将之保存下来;
    
ab  [OPTIONS]  URL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
     -n:总请求数;
     -c:模拟的并行数; //默认一次一个
     -t:测试所进行的最大秒数,默认-t  50000
     -p:需要post的数据
     -P:大写p:基本basic认证对一个中转代理提供BASIC认证信任。
         用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即, 是否发送了 401 认证需求代码),此字符串都会被发送。
     -w:已html方式输出。默认是
     -w以HTML表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。
     -i:执行HEAD请求,而不是GET。
     -x:设置<table>属性的字符串。
     -X:对请求使用代理服务器。
     -y:设置<tr>属性的字符串。
     -z:设置<td>属性的字符串。
     -C:对请求附加一个Cookie:行。其典型形式是name=value的一个参数对,此参数可以重复。
     -H:对请求附加额外的头信息。此参数的典型形式是一个有效的头信息行,其中包含了以冒号分隔的字段和值的对(如, "Accept-Encoding:zip/zop;8bit" )。
     -A:对服务器提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即,是否发送了 401 认证需求代码),此字符串都会被发送。
     -d:不显示 "percentage served within XX [ms] table" 的消息(为以前的版本提供支持)。
     -e:产生一个以逗号分隔的(CSV)文件,其中包含了处理每个相应百分比的请求所需要(从 1 %到 100 %)的相应百分比的(以微妙为单位)时间。由于这种格式已经“二进制化”,所以比 'gnuplot' 格式更有用。
     -g:把所有测试结果写入一个 'gnuplot' 或者TSV(以Tab分隔的)文件。此文件可以方便地导入到Gnuplot,IDL,Mathematica,Igor甚至Excel中。其中的第一行为标题。
     -i:执行HEAD请求,而不是GET。
     -k:启用HTTP KeepAlive功能,即在一个HTTP会话中执行多个请求。默认时,不启用KeepAlive功能。
     -q:如果处理的请求数大于 150 ,ab每处理大约 10 %或者 100 个请求时,会在stderr输出一个进度计数。此-q标记可以抑制这些信息。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#ab -c  100  -n  10000  -w http: //192.168.154.132/index.html  > a.html     
     //-c 指定并发用户数,-n总请求数
This is ApacheBench, Version  2.3  <$Revision:  1430300  $>
Copyright  1996  Adam Twiss, Zeus Technology Ltd, http: //www.zeustech.net/
Licensed to The Apache Software Foundation, http: //www.apache.org/
     
Server Software:    Apache/ 2.2 . 15
Server Hostname:     192.168 . 154.132
Server Port:     80
Document Path:    /index.html
Document Length:     27  bytes
Concurrency Level:     100         //并发用户数
Time taken  for  tests:     3.609  seconds  //总耗时
Complete requests:     10000
Failed requests:     0
Total transferred:     3010000  bytes
HTML transferred:     270000  bytes
Requests per second:     2771.06         //吞吐率req/s,
Transfer rate:     834088.22  kb/s received
Connnection Times (ms)
       min     avg     max
Connect:     0     0     19
Processing:     16     35     64
Total:     16     35     83


    
1、吞吐率(Requests per second)
    服务器并发处理能力的量化描述,单位是reqs/s,指的是在某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。
    记住:吞吐率是基于并发用户数的。这句话代表了两个含义:
    a、吞吐率和并发用户数相关
    b、不同的并发用户数下,吞吐率一般是不同的
    计算公式:总请求数/处理完成这些请求数所花费的时间,即
    Request per second=Complete requests/Time taken for tests
    必须要说明的是,这个数值表示当前机器的整体性能,值越大越好。
2、并发连接数(The number of concurrent connections)
    并发连接数指的是某个时刻服务器所接受的请求数目,简单的讲,就是一个会话。
3、并发用户数(Concurrency Level)
    要注意区分这个概念和并发连接数之间的区别,一个用户可能同时会产生多个会话,也即连接数。在HTTP/1.1下,IE7支持两个并发连接,IE8支持6个并发连接,FireFox3支持4个并发连接,所以相应的,我们的并发用户数就得除以这个基数。
4、用户平均请求等待时间(Time per request)
    计算公式:处理完成所有请求数所花费的时间/(总请求数/并发用户数),即:
    Time per request=Time taken for tests/(Complete requests/Concurrency Level)
5、服务器平均请求等待时间(Time per request:across all concurrent requests)
    计算公式:处理完成所有请求数所花费的时间/总请求数,即:
    Time taken for/testsComplete requests
    可以看到,它是吞吐率的倒数。
    同时,它也等于用户平均请求等待时间/并发用户数,即
    Time per request/Concurrency Level
    

    
第二部分:httpd-2.4安装与介绍
一、新的特性介绍(对比2.2)
1.新特性:http://httpd.apache.org/docs/2.4/new_features_2_4.html
    1.MPM支持运行为DSO机制;以模块形式按需加载
    2.event MPM,全部支持
    3.Asynchronous support异步读写
    4.每模块以及每目录单独日志级别定义
    5.每请求相关的专用配置;if,,elseif,else
    6.增强版表达式分析器 //内建的表达式分析引擎
    7.毫秒级的keep-alive时长定义
    8.NameVirtualHosts //基于FQDN的virtual host不再需要该指令,废弃
    9.AllowOverrideList 增强的allowoverridelist指令
    10.用户自定义变量支持
    11.降低了对内存的占用
2.新模块:
    1.mod_proxy_fcgi //php:快速cgi    编译到了mod_proxy中
    2.mod_proxy_scgi //Python
    3.mod_remoteip //基于ip的访问控制机制,被修改
    ...
    
二、安装    
1.Centos6编译安装
安装httpd-2.4
    依赖于apr-1.4+, apr-util-1.4+, [apr-iconv]
        apr: apache portable runtime //apache可移植运行环境
        apache是一个跨平台的运行服务,win,unix,linux
        依赖于apr实现在底层的封装:apr有linux,windows和unix的
        对于程序员来说,编写是一样的
            
    CentOS 6:http://apr.apache.org/download.cgi
        默认:apr-1.3.9, apr-util-1.3.9
            
开发环境包组:Development Tools, Server Platform Development
    开发程序包:pcre-devel 
        
编译安装步骤:
    (1) apr-1.4+
        # ./configure  --prefix=/usr/local/apr
        # make && make install
    (2) apr-util-1.4+
        # ./configure  --prefix=/usr/local/apr-util  --with-apr=/usr/local/apr
        # make && make install
    (3) httpd-2.4

1
# ./configure --prefix=/usr/local/apache24 --sysconfdir=/etc/httpd24  --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork

             

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
         # ./configure 
             --prefix=/usr/local/apache24  安装目录
             --sysconfdir=/etc/httpd24      
             
             --enable-so             支持动态模块
             --enable-ssl         
             --enable-cgi     
             --enable-rewrite     支持url重写
             
             --with-zlib         zlib提供压缩库
             --with-pcre         支持perl扩展的正则表达式
             
             --with-apr=/usr/local/apr 
             --with-apr-util=/usr/local/apr-util 
             
             --enable-modules=most     
             --enable-mpms-shared=all  //都编译
             --with-mpm=prefork         //默认prefork


    (4)# make  && make install
            enable|disable 启用或者禁用某些特性
            with/without :依赖或者不依赖某些程序包的
            enable-most 启用大多数模块    
            
            cat usr/local/httpd24/build/config.nice //记录有编译时所使用的参数
                apache24/error/ *.html.var //是错误页面
                apache24/htdocs   //网页文件的位置
                apache24/include //头文件
                
    (5) 自带的服务控制脚本:apachectl
        1.vim /etc/profile.d/httpd.sh
            export PATH=/usr/local/apache24/bin:$PATH  //把apache24加在前面,PATH从左往右匹配的
        2.ln -sv /usr/local/apache24/include /usr/include/httpd
        3.vim /etc/ld.so.conf.d/httpd.conf
            /usr/local/apache24/lib     写上路径即可
            ldconfig -v //重新加载一次
                    -p //已经加载的所有
        4.man文档
        
2.centos7的yum安装
    CentOS 7:# yum install  httpd
                
    配置文件:
        /etc/httpd/conf/httpd.conf
        /etc/httpd/conf.modules.d/*.conf
        /etc/httpd/conf.d/*.conf    
    配置应用:
    (1) 切换使用的MPM
        编辑配置文件/etc/httpd/conf.modules.d/00-mpm.conf,启用要启用的MPM相关的LoadModule指令即可。
        把主配置文件;httpd.conf中对象的注释启用
             1.如果是自主编译安装的include 该文件
             2.load-module启用
    (2) 基于IP的访问控制
        
        允许所有主机访问:Require  all  granted
        拒绝所有主机访问:Require  all  deny
        
        控制特定的IP访问:
            Require  ip  IPADDR:授权指定来源的IP访问;
            Require  not  ip  IPADDR:拒绝
                
        控制特定的主机访问:
            Require  host  HOSTNAME:授权指定来源的主机访问;
            Require  not  host  HOSTNAME:拒绝
                
            HOSTNAME:
                FQDN:特定主机
                domin.tld:指定域名下的所有主机
                                        
        <RequireAll>
            Require all granted  //必须有这个语句,否则默认是不允许任何人访问的
            Require not ip 172.16.100.2
        </RequireAll>                        
            
    (3) 虚拟主机
        基于FQDN的虚拟主机也不再需要NameVirutalHost指令;
        1.注释DocumentRoot
            vim /etc/httpd/conf.d/vhosts.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
                 <VirtualHost *: 80 >
                     ServerName www.b.net
                     DocumentRoot  "/www/b.net/htdocs"
                     <Directory  "/www/b.net/htdocs" >
                             Options None
                             AllowOverride None
                             Require all granted
                     </Directory>
                 <VirtualHost>
                 <VirtualHost *: 80 >
                     ServerName www.c.org
                     DocumentRoot  "/www/c.org/htdocs"
                     <Directory  "/www/b.net/htdocs" >
                             Options None
                             AllowOverride None
                             Require all granted
                     </Directory>
                 <VirtualHost>


                            
            httpd -t    
            service httpd restart
        2.vim /etc/hosts  测试机,使用

        注意:任意目录下的页面只有显式授权才能被访问;
        3.默认虚拟主机
        <VirtualHost _default_:80> //使用默认虚拟主机
    
    (4) ssl
            yum install mod_ssl
    (5) KeepAliveTimeout  #ms
        毫秒级持久连接时长定义;
        KeepAlive On
        KeepAliveTimeout 30ms
        MaxKeepAliveRequests 20

测试:分别使用httpd-2.2和httpd-2.4实现;
    1、建立httpd服务,要求:
        (1) 提供两个基于名称的虚拟主机:
            www1.stuX.com,页面文件目录为/web/vhosts/www1;错误日志为/var/log/httpd/www1/error_log,访问日志为/var/log/httpd/www1/access_log;
            www2.stuX.com,页面文件目录为/web/vhosts/www2;错误日志为/var/log/httpd/www2/error_log,访问日志为/var/log/httpd/www2/access_log;
        (2) 通过www1.stuX.com/server-status输出其状态信息,且要求只允许提供账号的用户访问;
        (3) www1不允许192.168.1.0/24网络中的主机访问;
            
    2、为上面的第2个虚拟主机提供https服务,使得用户可以通过https安全的访问此web站点;
        (1) 要求使用证书认证,证书中要求使用国家(CN),州(Beijing),城市(Beijing),组织为(MageEdu);
        (2) 设置部门为Ops, 主机名为www2.stuX.com;
            





本文转自MT_IT51CTO博客,原文链接:http://blog.51cto.com/hmtk520/2044142,如需转载请自行联系原作者

相关文章
|
网络协议 Apache
HTTP详解
HTTP详解
1345 0
HTTP详解
|
Web App开发 存储 监控
|
Web App开发 网络协议 前端开发
|
Web App开发 存储 安全
|
Web App开发 缓存 网络协议
|
数据安全/隐私保护 算法 安全
|
Web App开发 存储 缓存
HTTP请求与相应详解
HTTP请求格式 当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息,HTTP请求信息由3部分组成: l   请求方法URI协议/版本 l   请求头(Request Header) l   请求正文 下面是一个HTTP请求的例子: GET/sample.
849 0
|
1月前
|
前端开发
webpack如何设置devServer启动项目为https协议
webpack如何设置devServer启动项目为https协议
136 0
|
3月前
|
Web App开发 移动开发 JavaScript
Python网络编程(三),HTTP协议
Python网络编程(三),HTTP协议
60 0
|
4月前
|
网络协议
【计算机网络-应用层】HTTP协议
【计算机网络-应用层】HTTP协议