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