博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HTTP2.4详解(三)
阅读量:6844 次
发布时间:2019-06-26

本文共 15738 字,大约阅读时间需要 52 分钟。

第一部分: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,如需转载请自行联系原作者

你可能感兴趣的文章
菲尔兹奖得主维拉尼:七个点子帮你找到科研灵感
查看>>
《C语言程序设计与实践(第2版)》——导读
查看>>
《Java EE 7精粹》—— 第2章 Servlets 2.1 WebServlet
查看>>
《计算机科学概论(第12版)》—第1章1.4节用位模式表示信息
查看>>
C2B前还有S2b,阿里携手产学研探索新零售时代的供应链未来
查看>>
Linux集群和自动化维2.4.2 sed的用法示例
查看>>
为 Kodi 自制遥控器
查看>>
《OpenGL ES 3.x游戏开发(上卷)》一1.2 搭建Android开发环境
查看>>
《HTML5实战》——2.6 小结
查看>>
使用 Python 和 Asyncio 编写在线多人游戏(三)
查看>>
yanf4j 1.0-stable的一个压测报告
查看>>
Square 技术团队的开源其 Vim 配置文件
查看>>
MySQL锁系列(二)之 锁解读
查看>>
《OpenGL超级宝典(第5版)》——第1章,第1.5节总结
查看>>
《Python 3程序开发指南(第2版•修订版)》——第7章 文件处理 7.1 二进制数据的读写...
查看>>
《Java编码指南:编写安全可靠程序的75条建议》—— 指南6:正确地编码或转义输出...
查看>>
阿里NASA的液冷黑科技 | 彻底激活未来AI大脑超能力
查看>>
stack源码分析
查看>>
Java内存溢出(OOM)异常完全指南
查看>>
云计算十字真言及其在小博无线的实践
查看>>