http协议(2.2&2.4)RPM搭建配置
httpd的程序环境:
主程序文件:/usr/sbin/httpd
CentOS6系列(默认httpd2.2)
1)配置文件:
/etc/httpd/conf/httpd.conf、 /etc/httpd/conf.d/*.conf
2)服务脚本:
/etc/rc.d/init.d/httpd 配置文件:/etc/sysconfig/httpd
3)主程序文件:
/usr/sbin/httpd、 /usr/sbin/httpd.event、 /usr/sbin/httpd.worker
4)日志文件目录:
/var/log/httpd access_log: 访问日志;error_log:错误日志
5)站点文档目录:
/var/www/html
6)模块文件路径:
/usr/lib64/httpd/modules
7)配置文件的组成:
~]# grep "Section" /etc/httpd/conf/httpd.conf
Section 1: Global Environment Section 2: 'Main' server configuration Section 3: Virtual Hosts
8)配置格式:directivevalue
directive: 不区分字符大小写;value: 为路径时,取决于文件系统;
主配置文件概述
### Section 1: Global Environment 全局配置段 ### Section 2: 'Main' server configuration 中心主机配置段 ### Section 3: Virtual Hosts 虚拟主机配置段
全局配置:其中的指令用于在全局层面配置一个Apache服务器相关属性
中心主机配置:其中的指令用于定义"主要"或者"默认"的服务,改段参数也能够够提供虚拟主机端配置的相关指令
虚拟主机段:允许Web请求从不同的IP、FQDN或者同一台Apache服务器的不同进程端口被发送
注意:中心主机段和虚拟主机段不能同时被发送,虚拟主机段可以在/etc/httpd/conf.d/*.conf被定义
CentOS7系列(默认httpd2.4)
1)配置文件:
/etc/httpd/conf/httpd.conf、 /etc/httpd/conf.d/*.conf
2)模块相关的配置文件:
/etc/httpd/conf.modules.d/*.conf systemd unit file:/usr/lib/systemd/system/httpd.service
3)主程序文件:
/usr/sbin/httpd(httpd-2.4支持MPM的动态切换)
4)日志文件目录:
/var/log/httpd access_log: 访问日志;error_log:错误日志
5)站点文档:
/var/www/html
6)模块文件路径:
/usr/lib64/httpd/modules
7)服务控制:
systemctl enable|disable httpd.service 设置开机启动和关闭服务 systemctl {start|stop|restart|status|reload} httpd.service /usr/sbin/apachectl 自带脚本
httpd-2.2&2.4的基础配置
配置文件格式:每一行一个配置指令组成
DIRECTIVE VALUE DIRECTIVE: 不区分字符大小写;例如ServerRoot; VALUE:除了文件系统路径,大多数也不区分字符大小写;
配置修改完成后:
(1) 测试语法; ~]# httpd -t (2) 让服务程序重载配置文件: ~]# service httpd reload (centos 6) ~]# systemctl reload httpd.service (centos 7)
1)修改监听的地址和端口
Listen [ip:]port Listen指令可重复出现多次; PORT不能省略,但ip可以省略;省略ip表示监听0.0.0.0.,即本机所有可用IP; 修改监听socker,不能重新加载服务配置,必须重启服务才能生效
注意:在添加了监听地址和端口后不需要重启服务,只要重载配置文件即可生效,但是如果删除了某一端口就必须重启服务
示例:
httpd]# vim conf/httpd.conf 打开全局配置文件,在listen区段加入需要监听的端口和ip
]# systemctl reload httpd.service 重载配置文件 ]# ss -tnl 查看端口是否已经处于监听状态
在浏览器访问各个端口可访问
2)保持连接
persistent connection:tcp连接建立后,资源获取完成之后不会断开连接,而是继续等待请求其它资源; 通过连接请求数量限制或者时间长短限制来实现TCP连接的断开 弊端:对并发访问量较大的服务器,长连接机制会使得后续某些请求无法得到正常响应; 解决方法:使用较短的持久连接时长,以及较少的请求数量;httpd-2.4 支持毫秒级持久时间; KeepAlive (保持连接) On|Off MaxKeepAliveRequests (一次持久连接最多支持请求多少个资源) 100 KeepAliveTimeout (一次持久连接的保持时间) 10
示例:
httpd]# vim conf.d/keepalive.conf 编辑持久连接配置文件,写入以下内容 KeepAlive On 保持连接开启 MaxKeepAliveRequests 20 一次持久连接允许20次请求 KeepAliveTimeout 5 一次持久连接保持时间为5秒 httpd]# systemctl reload httpd.service 重载配置文件 浏览器访问查看请求报文持久连接生效
再次编辑保持连接配置文件关闭此功能,使用浏览器查看到服务器端响应报文显示此功能处于关闭状态,而对于客户端的请求报文则显示keepa-live, 此意表示尽可能的保持连接,客户端请求时当然以能够保持连接为最好,因为传输效率高.但是服务器端不支持所以只能close,所有请求和响应要看双方是否共同支持
3)DSO:动态共享模块机制,配置指令实现模块加载
通过配置指令动态加卸载模块:LoadModule modname modules/modfile_name
模块路径可使用相对地址[ServerRoot指令(/etc/httpd)]指向的路径而言:/etc/httpd/modules/ 若不需要启用该模块,仅需用#将其注释即可
httpd命令:
显示所有已经装载了的模块 -t -D DUMP_MODULES : show all loaded modules -M : a synonym for -t -D DUMP_MODULES
模块配置文件在/etc/httpd/conf.modules.d/00-base.conf 而在/etc/httpd/conf.modules.d/目录下有很多00开头的文件,00,01,02这些是为了做排序的,越考前越优先被加载.
使用vim命令打开/etc/httpd/conf.modules.d/00-base.conf配置文件可以看到有一大堆模块,如果某个功能不想用了,只需要将其注释掉即可.
注意:有些功能可能会被其他模块所依赖
示例:
]# httpd -M |grep "suexec" suexec_module (shared) 使用httpd -M 可看到suexec_module已经被装载 httpd]# vim conf.modules.d/00-base.conf 打开模块配置文件注释掉sueexec_module模块 ]# systemctl reload httpd.service 重载配置文件 [root@localhost httpd]# httpd -M |grep "suexec" [root@localhost httpd]# 再次使用httpd -M 已经看不到sueexec_module模块了
4)定义站点主页
用户访问时,定义多个主页的时候,从左向右逐个遍历,若都无法找到
1)报错&重新指向错误提示页面
2)返回索引列表,危险,一般仅用在下载站点
DirectoryIndex filename1 filename2 …
5)Main Server中心服务器的相关配置
(1) DocumentRoot:站点文档根路径;
(2) ServerName:服务器名称;
servername这个指令默认是被注释的,一旦被注释了的话,它会尝试着反向解析当前主机的IP地址到一个主机名,然后把那个主机名当作servername, 但是那个主机名反向解析的结果和当前主机的主机名如果不一致的话就会报错,这里做实验之所以没有报错是因为正解反解和主机配置是一样的, 如果不一样的话可以把这个指令启动起来然后随便给它一个字符串名称就行了.
一般而言在生产环境中使用时网页文件很有可能并不会放在/var/www/html/目录,而是自己规划的一个专用位置.这时就要修改DocumentRoot即可.http2.4对于每一个由url映射到的路径有一个基本要求,必须要做明确授权用户访问,否则默认都不允许访问.授权方式有两种;可以基于url进行,也可以基于文件系统的路径进行.
站点文档访问授权及众多服务特性的配置:
基于文件系统路径: 定义一个文件的访问授权 <Directory "/PATH/TO/DIR"> </Directory> ================================= <File ""> </File> 基于URL进行: <Location "URL"> ... </Location> ==================================== <LocationMatch ~ "URL_PATTERN"> ... </LocationMatch>
示例:
httpd]# vim conf/httpd.conf 打开配置文件,修改DocumentRoot 文件为/web/htdocs,并且授权url映射到的路径,否则无法访问
]# mkdir /web/htdocs -pv 创建目录 httpd]# vim /web/htdocs/index.html 创建网站主页,写入以下信息 /web/htdocs/index.html 使用浏览器访问进行测试
(3) Options:定义页面资源的服务方式
所有可用值Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews Indexes:默认启用,指明URL路径下不存在与定义的主页面资源相符文件时,返回索引列表给用户,危险 Includes:允许启动服务器包含 FollowSymLinks: 允许跟踪符号链接文件所指向的源文件; SymLinksifOwnerMatch:允许跟踪符号链接文件,但是原文件的和连接文件的属主属组相同 ExecCGI:允许执行CGI脚本 MultiViews:允许做内容协商,十分消耗资源且不安全 None:全部不可以 All:全部可以访问 重点说明; None:如果哪个选项都不启用就使用此值 All:如果所有选项都启用就使用此值 Indexes:索引;用户访问某个目录时没给定要访问哪个文件,如果网站没有主页的话就会显示出网站的所有文件的列表让用户选择, 如果这是一个动态网站的话,用户看到的就是网站程序的源码文件.再如果此目录下放了一个数据库的话,就有可能被人偷走,所以说这是很危险的,除非你要提供一个下载点, 否则坚决不要使用Indexes FollowSymLinks:允许跟踪符号链接:比如在DocumentRoot映射的目录下有一个连接文件是指向/etc/fstab的,那么如果用户访问这个连接文件的时候就会访问到/etc/fstab,这是一种潜在性的风险.建议禁止 ExecCGI:允许执行CGI脚本:
(4) AllowOverride:是否允许覆盖
httpd的访问控制配置,允许每目录单独进行;在每个目录下建立一个.htaccess文件; AllowOverride表示是否允许目录中的.htaccess文件中的配置来覆盖当前配置段中的配置; 使用该配置会使站点十分消耗资源,对目录解析的性能影响十分大,一般不使用 可用取值:Options FileInfo AuthConfig Limit All:全部允许 None :全部不允许
(5) 基于源地址的访问控制
允许所有地址访问:Require all granted 拒绝所有地址访问:Require all denied 如果我们要打算做一个白名单或者黑名单,我们需要加上一个RequireAll的容器;在里边进行定义;比如先开放或决绝一些,然后再开放或拒绝所有.实施格式如下;基于IP或基于主机名进行控制 <RequireAll> </RequireAll> 基于IP控制: Require ip ADDRESS : 允许这个ip访问 Require not ip ADDRESS : 拒绝这个ip访问 ADDRESS: 两种使用方式 ip:可以是单个IP network:也可以是网络地址,网络地址的表示方式可以有多种,如下; 10.1.0.0/255.255.0.0 10.1.0.0/16 10.1 基于主机名控制:和基于ip控制区别不大 只是把ip换成了host Require host HOSTNAME : Require not host HOSTNAME HOSTNAME:两种表示方式,如下; FQDN:完整主机名 DOMAIN.TLD:域名
示例: 基于ip地址控制拒绝10.1.250.14访问(物理机ip)
httpd]# vim conf/httpd.conf 对要拒绝访问的目录配置段进行配置
httpd]# httpd -t 检测语法 httpd]# systemctl reload httpd.service 重载配置文件 使用物理机浏览器进行测试
使用另外一台VM虚拟机进行测试
恢复允许所有主机访问 只需要删掉Require not ip ADDREES一行就可以了
6)User/Group:进程的运行者身份;
我们都知道httpd进程的运行者的身份是apache,这是因为http配置文件中定义了的
7)定义路径别名
Alias /URL/ /PATH/TO/SOME_DIR/
示例:
]# mkdir /data/bbs -pv 创建别名指向的路径 ]# vim /data/bbs/index.html 编辑别名页面内容 <h1> BBS </h1> ]# vim conf/httpd.conf 编辑httpd配置文件,在别名模块区域加入以下信息 Alias /forum/ /data/bbs/ <Directory "/data/bbs"> Options None AllowOverride None Require all granted </Directory> 并且加入以下服务名 ServerName localhost:80 ]# httpd -t 检查语法错误 ]# systemctl reload httpd.service 重载配置文件 在浏览器访问测试
8)httpd-manual httpd的本地官方文档
]# yum -y install httpd-manual 安装文档包 ]# systemctl reload httpd.service 重载配置文件 浏览器打开测试
配置文件:conf.d/manual.conf http://host/manual/
9)status page
]# httpd -M 先查看status 模块是否被装载,如果这个模块被装载了,那么status页面内置的功能就存在,就可以自己定义一个路径别名来向外输出 status_module (shared) httpd]# vim conf.d/status.conf 创建一个配置文件 <Location /status> SetHandler server-status Require all granted </Location> httpd]# httpd -t 检测语法错误 httpd]# systemctl reload httpd.service 重载配置文件 浏览器测试
10)日志设定
/var/log/http/ access.log:访问日志,其需要记录的内容需要自定义 error.log
错误日志:
ErrorLog :错误日志 "/var/log/httpd/error_log" LogLevel warn :日志级别,指定日志级别为warn,那么别warn级别更高的日志都会被记录的 Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
访问日志:
定义访问日志时需要在配置文件中写入Customlog 还要跟上日志文件,格式如下;
LogFormat "FORMAT_STRINGS" LOG_FORMAT_NAME CustomLog "/PATH/TO/LOG_FILE" LOG_FORMAT_NAME LogFormat定义日志格式 "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" %h:客户端地址 %l:远程的登录名,通常为- %u:认证时的远程用户名,通常为- %t:接收到的请求时的时间,为标准英文格式时间+时区 \" :转义,显示"" %r:请求报文的起始行 %>s:响应状态码, %b:以字节响应报文的长度,不包含http报文 %{Header_Name}i:记录指定请求报文首部的内容(value) %u:请求的URL
11)虚拟主机
虚拟主机通常是指在真主机上虚拟出来的主机,从本质上来讲虚拟主机就是本来一台物理服务器只能提供一个站点,但是我们却能够扩展他用于提供多个站点,这其中的多个站点跟物理服务是没有一一对应关系的,因此被称为虚拟主机.这么做的原因是,一个网站一天的点击量很小,如果用一台专门的物理服务器的话,成本太高.所以就要用到虚拟主机的方式来进行.每一个主机的定义主要来于两个方面的资源,ServerName和DocumentRoot,所以只需要从这两方面来定义虚拟主机就可以了.
客户端访问网站时通常是通过主机名,端口,url来访问的,那么只有一台物理主机的情况下用户访问的时候怎么把其映射到不同的虚拟主机上去呢?url对一个主机是独有的,所以难以区分,能够区分的只有端口,主机名,IP.因此创建虚拟主机就有了三种区分不同虚拟主机的标识方式.
主机标识方式:
IP不同 PORT不同 此两种方法一般不使用,端口不同的话客户端访问不到了.ip不同的话,每一个ip地址的使用费是很高的,代价太大. ServerName:通过host在请求报文首部当中传过去使用的的主机名,成为FQDN. http允许混合使用这三种方式.
定义虚拟主机的方法;
<VirtualHost IP:PORT> ServerName DocumentRoot <Directory ""> ... Require all granted </DIrective> ErrorLog CustomLog </VirtualHost>
注意:httpd-2.2中使用基于ServerName的虚拟主机时,要使用专用配置指令
NameVirtualHost IP:PORT
示例:基于ip+端口实现三个虚拟主机,使用/vhosts/www{1,2,3}分别对应三个虚拟主机
创建3个虚拟主机目录,并且生成三个主页 ]# for i in {1..3};do mkdir -pv /vhosts/www$i; echo "www$i : site $i" > /vhosts/www$i/index.html; done
httpd]# vim conf.d/vhost.conf 编辑虚拟主机配置文件
通过浏览器访问测试
示例:基于ip+端口实现三个虚拟主机,要求端口一样ip地址不一样,混合使用.
]# ip a add 10.1.249.81/16 dev eno16777736 为网卡设备新增一个IP地址 ]# ping 10.1.249.81 测试可ping通 httpd]# vim conf.d/vhost.conf 修改配置文件
]# httpd -t 检测语法 ]# systemctl reload httpd.service 重载配置文件 在浏览器访问测试
示例:基于主机名实现三个虚拟主机,所有三个虚拟主机端口一致,*表示所有ip地址
httpd]# vim conf.d/vhost.conf 修改配置文件
]# vim /etc/hosts 编辑hosts文件增加名称解析项
]# curl http://www1.ali.com 使用curl命令进行测试
注意:使用基于主机名实现虚拟主机,如果使用的是http2.2,那么此处需要使用NameVirtualHost IP:PORT,这里的ip和端口和虚拟机使用的ip和端口要保持一致,可能还要注释DocumentRoot 要注释中心主机
示例:每一个虚拟主机还可以单独使用访问日志和错误日志
httpd]# vim conf.d/vhost.conf 修改配置文件
]# httpd -t 检测语法错误 ]# systemctl reload httpd.service 重载配置文件 ]# curl http://www1.ali.com 测试是否生效
示例:在三个虚拟主机实现路径别名/bbs,访问其他文件系统路径
]# vim conf.d/vhost.conf 修改配置文件
]# httpd -t 检测语法 ]# systemctl reload httpd.service 重载配置文件 在浏览器测试
示例:在第二个虚拟主机上提供/status
]# vim conf.d/vhost.conf 修改配置文件,增加status配置
]# httpd -t 检测语法 ]# systemctl reload httpd.service 重载配置文件 在实体机hosts文件中增加域名解析 10.1.249.80 www2.ali.com 在浏览器测试
12)基于用户的访问控制
Require user USERLIST
Require group GRPLIST
http的认证方式:
basic认证 digest认证
http协议认证过程:
认证质询:服务器端收到认证请求以后,会发起认证质询. 相应给客户端一个 WWW-Authencate 的首部:响应码为401,拒绝客户端请求,并说明用户需要输入正确的账号和密码之后方可访问; 认证:客户端收到质询以后,需要进行提交认证 提交时客户端给服务端发送一个 Authorization 首部:客户端填入账号和密码,再次发送请求报文;认证通过,服务器发送响应内容;
要想对一个目录下的文件进行访问控制的话,需要在目录中进行如下定义;
<Directory ""> Options None AllowOverride None AuthType Basic 定义认证方式 AuthName "STRING" 定义认证名称 AuthUserFile "" 指明认证时所使用的用户帐号,""用户帐号文件的路径是自己定义的,只要这个文件存在就行 Require user USER1 USER2 ... 定义用户帐号文件中允许登录的用户列表,Require valid-user表示允许用户帐号文件中的所有用户登录 </Directory>
账号文件生成工具htpasswd
htpasswd [options] "/PATH/TO/HT_PASSWD_FILE" username -c:创建此文件; -m:md5加密密码存放; -s:sha加密 -D: 删除指定用户
示例:为第三个虚拟主机的/admin进行用户访问认证
生成一个用户帐号文件,用户名为ali和ayisha ]# htpasswd -c -m /etc/httpd/conf/.htpasswd ali ]# htpasswd -m /etc/httpd/conf/.htpasswd ayisha
为第三个虚拟主机创建一个网页文件 ]# mkdir /vhosts/www3/admin -pv 创建url ]# vim /vhosts/www3/admin/admin.html 创建主页文件 <h1>admin</h1> 定义授权配置文件 ]# vim conf.d/vhost.conf
]# httpd -t 检测语法 ]# systemctl reload httpd.service 重载配置文件 浏览器输入url/admin/admin.html测试
Require的使用方式:
(1) Require valid-user 授权用户帐号文件中所有合法用户 (2) Require user USER1 USER2 ... 授权用户帐号文件中指定合法用户
基于组进行认证:
<Directory "/vhosts/www1/admin"> Options None AllowOverride None AuthType Basic AuthName "Admin Area, Enter your name/pass" AuthUserFile "/etc/httpd/conf/.htpasswd" AuthGroupFile "/etc/httpd/conf/.htgroup" Require group GRPNAME1 GRPNAME 2 </Directory>
组账号文件:组帐号文件使用VIM就可以定义,组中的用户必须是用户帐号文件中我们已经创建了的用户 每行定义一个组 group_name: user1 user2 …
示例:组认证
创建两个新用户 ]# htpasswd -m /etc/httpd/conf/.htpasswd lucy ]# htpasswd -m /etc/httpd/conf/.htpasswd blair httpd]# vim conf/.htgroup 编辑组文件,将两个新用户加入组中 admins: lucy blair httpd]# vim conf.d/vhost.conf 编辑配置文件
]# httpd -t 检测语法 ]# systemctl reload httpd.service 重载配置文件 浏览器输入url/admin/admin.html测试
13)curl命令
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服务器等等,功能十分强大。
语法
curl [options] [URL...]
curl的常用选项:
-A/--user-agent <string> 设置用户代理发送给服务器 --basic 使用HTTP基本认证 -e/--referer <URL> 来源网址 --cacert <file> CA证书 (SSL) --compressed 要求返回是压缩的格式 -H/--header <line>自定义首部信息传递给服务器 -I/--head 只显示响应报文首部信息 --limit-rate <rate> 设置传输速度 -u/--user <user[:password]>设置服务器的用户和密码 -0/--http1.0 使用HTTP 1.0 -X, --request <command>:自定义请求方法
另一个工具:elinks
elinks [OPTION]... [URL]... -dump: 不进入交互式模式,而直接将URL的内容输出至标准输出
14)使用mod_deflate模块压缩页面优化传输速度
适用场景:
(1) 节约带宽,额外消耗CPU;同时,可能有些较老浏览器不支持;
(2) 压缩适于压缩的资源,例如文件文件;
设置压缩文件过滤器
SetOutputFilter DEFLATE # mod_deflate configuration # Restrict compression to these MIME types AddOutputFilterByType DEFLATE text/plain :纯文本文件 AddOutputFilterByType DEFLATE text/html :html文档 AddOutputFilterByType DEFLATE application/xhtml+xml :扩展的html和xml混合的文档 AddOutputFilterByType DEFLATE text/xml :xml文件 AddOutputFilterByType DEFLATE application/xml :输入applocation的xml文件 AddOutputFilterByType DEFLATE application/x-javascript :js代码 AddOutputFilterByType DEFLATE text/javascript 属于js的文本文件 AddOutputFilterByType DEFLATE text/css :css文件 # Level of compression (Highest 9 - Lowest 1) DeflateCompressionLevel 9 :压缩比是9 9是最高压缩比 # Netscape 4.x has some problems. BrowserMatch ^Mozilla/4 gzip-only-text/html :对 Netscape 4.x的浏览器,只用gzip-only-text/html进行压缩 # Netscape 4.06-4.08 have some more problems BrowserMatch ^Mozilla/4\.0[678] no-gzip :Netscape 4.06-4.08的浏览器不兼容gzip,所有禁止掉 # MSIE masquerades as Netscape, but it is fine BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html :MSIE不支持no-gzip,gzip-only-text.所以进行取反
示例:
]# httpd -M |grep deflate 确认模块已经被装载 ]# cp /var/log/messages /var/www/html/messages.txt 复制一个比较大的文件作为实验环境 ]# chmod +r /var/www/html/messages.txt 为此文件的所有用户加上读权限 ]# curl -I http://10.1.249.80/messages.txt 测试可访问到此文件
]# curl --compressed -I http://10.1.249.80/messages.txt 使用crul命令要求返回压缩格式数据,返回结果中并没有显示所支持的压缩格式
这里需要设置输出过滤器(SETOutputFilter DEFLATE),把仅适合压缩的文件归类到过滤器里,并对过滤器过滤下来的文件执行压缩,被过滤器漏掉的就不压缩了.
]# vim /etc/httpd/conf.d/deflate.conf 编辑过滤其配置文件
]# httpd -t 检测语法 ]# systemctl reload httpd.service 重载配置文件 ]# curl -I http://10.1.249.80/messages.txt 再次使用curl测试
]# curl --compressed -I http://10.1.249.80/messages.txt 再次要求返回压缩格式测试
15)https, http over ssl
SSL会话的简化过程
(1) 客户端发送可供选择的加密方式,并向服务器请求证书;
(2) 服务器端发送证书以及选定的加密方式给客户端;
(3) 客户端取得证书并进行证书验正:
如果信任给其发证书的CA: (a) 验正证书来源的合法性;用CA的公钥解密证书上数字签名; (b) 验正证书的内容的合法性:完整性验正 (c) 检查证书的有效期限; (d) 检查证书是否被吊销; (e) 证书中拥有者的名字,与访问的目标主机要一致;
(4) 客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换;
(5) 服务用此密钥加密用户请求的资源,响应给客户端;
注意:SSL会话是基于IP地址创建;所以单IP的主机上,仅可以使用一个https虚拟主机;
配置httpd支持https:
(1) 为服务器申请数字证书;
测试:通过私建CA发证书 (a) 创建私有CA (b) 在服务器创建证书签署请求 (c) CA签证
(2) 配置httpd支持使用ssl,及使用的证书;
# yum -y install mod_ssl 配置文件:/etc/httpd/conf.d/ssl.conf DocumentRoot ServerName SSLCertificateFile SSLCertificateKeyFile
(3) 测试基于https访问相应的主机;
# openssl s_client [-connect host:port] [-cert filename] [-CApath directory] [-CAfile filename]
示例:配置https
创建一个CA
自签CA证书
CA]# echo 01 > serial echo一个证书编号 CA]# touch index.txt touch一个数据库文件 CA]# cd /etc/httpd/ 进入/etc/http目录 httpd]# mkdir certs 创建一个certs目录 在/etc/httpd/certs目录下创建一个用于httpd通信时用到的私钥
利于此私钥创建签署请求
签署CA,这里处于测试目的在一台机器上签署,是实际应用环境当中需要将CA签署请求传送给CA机构
]# yum install mod_ssl -y 安装httpd的ssl模块 [root@localhost certs]# rpm -ql mod_ssl /etc/httpd/conf.d/ssl.conf :配置ssl虚拟主机的文件 /etc/httpd/conf.modules.d/00-ssl.conf :载入模块的文件 /usr/lib64/httpd/modules/mod_ssl.so :ssl模块 /usr/libexec/httpd-ssl-pass-dialog /var/cache/httpd/ssl 配置ssl虚拟主机
]# httpd -t 检测语法错误 ]# systemctl reload httpd.service 重载配置文件 将CA自签证书和http证书导入浏览器 然后进行访问测试
16)httpd自带的应用程序
htpasswd:basic认证基于文件实现,用于生成账号和密码的程序;把用户的帐号密码放在服务器端的一个文本文件中
1.htdbm:与htpasswd不同用于实现把用户的帐号做哈希编码,放在一个db库中. 2.htdigest 3.apachectl:httpd自带的服务控制脚本,支持start和stop等子命令; 4.apxs:- APache eXtenSion tool apache的扩展工具 用于实现为httpd增添模块的:在需要将第三方模块或者是httpd官方的某一些没有编译的模块单独编译时必须指明apxs的路径才可以完成挂接的. 5.apxs功能的实现是由程序包httpd-devel提供的 6.rotatelogs:日志滚动工具 access_log, access_log, access_log.1, ... 7.ab: - Apache HTTP server benchmarking tool 性能压测工具 通常只能对一个资源进行压测请求做简单评估 webbench, httpload, ... loadrunner, jmeter (ASF) tcpcopy:网易研发的开源产品,工作特性是复制线上的流量,然后把复制的流量保存在一个文件中,做压测的时候使用此文件进行
17)ab – web service的压力测试工具
ab [OPTIONS] [http[s]://]hostname[:port]/path 请求数:[ -n requests ] 并发数:[ -c concurrency ] 长连接:[ -k ] 示例: ]# ab -n 1000 -c 1 http://10.1.249.80/messages.txt
httpd-2.2与httpd-2.4的不同之处:
MPM:多道处理模块
prefork:进程模型,两级结构,master/worker, 每worker处理一个请求; worker:线程模型,三级结构,master/worker/thread,每thread处理一个请求; event:事件驱动的线程模型,两级结构,master/worker,每worker响应多个请求; httpd-2.2的MPM模块为static模块,而非shared模块; 要想切换mpm模块需要去编辑/etc/sysconfig/httpd当中的HTTPD变量的值;如下 HTTPD=/usr/sbin/{httpd|httpd.worker|httpd.event} http2.2上默认对于不同的mpm的配置参数:/etc/http/conf/httpd.conf <IfModule prefork.c> StartServers 8 :默认启动的进程数 MinSpareServers 5 :最少空闲进程 MaxSpareServers 20 :最大空闲进程 ServerLimit 256 :服务器上启动的进程的上限 MaxClients 256 :最大连接数 MaxRequestsPerChild 4000 :每进程所能够承受的最大请求数 </IfModule> <IfModule worker.c> StartServers 4 :默认启动的进程数 MaxClients 300 : MinSpareThreads 25 :最小空闲线程数 MaxSpareThreads 75 :最大空闲线程数 ThreadsPerChild 25 :每子进程启动的线程数量 MaxRequestsPerChild 0 : </IfModule>
基于IP的访问控制机制:
httpd-2.4: require ip, require not ip, require host, require not host httpd-2.2: allow from, deny from order allow,deny:白名单 order deny,allow:黑名单
示例:拒绝10.1.249.68来访问的配置
]# vim /etc/httpd/conf/httpd.conf 编辑配置文件
]# service httpd reload 重读配置文件 ]# crul http://172.18.19.34 在10.1.249.80主机上进行进行访问测试
基于主机名的虚拟主机:
httpd-2.2:须使用NameVirtualHost; httpd-2.4:无须使用;
各映射的本地文件系统路径内的资源:
httpd-2.4:须做显式授权 httpd-2.2:无须显式授权
示例:创建两个虚拟主机
]# mkdir -pv /vhosts/www{1,2} 创建两个虚拟主机目录 ]# vim /vhosts/www1/index.html 编辑虚拟主机1的主页 ]# vim /vhosts/www2/index.html 编辑虚拟主机2的主页 ]# ]# vim /etc/httpd/conf/httpd.conf 注释掉中心主机的DocumentRoot ]# vim /etc/httpd/conf.d/vhosts.conf 编辑虚拟主机配置文件 ]# httpd -t 检测语法错误 ]# service httpd reload 重载配置文件 添加物理机hosts域名解析 浏览器测试虚拟主机
原创文章,作者:M20-1马星,如若转载,请注明出处:http://www.178linux.com/52445