补充:衡量httpd服务的访问量的两个重要指标
PV:页面访问请求次数(统计的是页面入口接口访问量而不是所有页面所包含的网页连接)
UV:这些访问请求包含多少IP
1 . web服务器程序
2. httpd的特性
①高度模块化
②DSO(动态共享对象):支持动态装卸载模块
③MPM(多进程处理模块):支持多种不同的I/O模型 MPM三种模型详解
prefork:多进程模型,每个进程相应一个请求
一个主进程负责生成n个子进程,每个子进程处理一个用户请求,即使没有用户请求也会预先生成多个空闲进程,随时
等待请求到达。最大不会超过1024个;主进程只负责监听进程,并送给子进程处理
worker:多进程和多线程的混合模式,但是存在keep-alive长连接的时候占用线程资源被浪费的问题
event:类似于worker,但是解决了keep-alive长连接的时候占用线程资源被浪费的问题
centos6: 2.2版本的httpd 相关配置
-
主要目录与文件
模块文件路径:
/usr/lib64/httpd/modules
配置文件
1.
2
例
3.
更换使用的httpd程序(模块/IO模型):
vim /etc/sysconfig/httpd
查看
这三个应用主程序都能够通过主配置文件来配置
vim /etc/httpd/conf/httpd.conf
接上图:
prefork的配置
StarServers 服务启动时的进程数
MinSpareServers 最小空闲进程数
MaxSpareServers 最大空闲进程数
ServerLimit 为MaxClients所准备的在其服务器周期内所允许的最大值
MaxClients 最大并发请求数
MaxRequestsPerChild 一个服务进程最多能响应多少次的请求
worker的配置 :
- DSO 实现动态模块加载 :
主配置文件中配置指令实现模块加载与卸载
LoadModule <mod_name> <mod_path>
模块路径可以使用相对地址,可以ll查看/etc/httpd/modules时软连接rpm -ql httpd查看模块的真实路径
可以注释掉主配置文件中的模块并重载一下就会卸载模块
httpd -M查看所有模块是否注释的模块被卸载掉
5.
定义‘Main’ server的文档页面路径
DocumentRoot:指向的路基那个为URL路径的起始位置
例:
配置文件为DocumentRoot “/var/www/html”
网页文件为/var/www/html/test/index.html
访问时URL应该为:http://HOST:PORT/test/index.html
6.
7 Directory中“基于来源地址”实现访问控制
Options:
ALL:以下所有特性都支持
None:以下所有特性都不支持
Indexes:如果访问时找不到资源或默认网页允许索引所有网页
FollowSymlinks::允许跟踪符号连接文件
SymLinksifOwnerMatch:允许跟踪源文件跟连接文件为同一属主的链接文件
ExecCGI:是否允许执行CGI脚本
MultiViews:是否允许多视图,内容协商机制,例如根据浏览器中英文环境匹配中英文内容
但是会导致性能差和有风险性一般不启用
(2)基于来源地址的访问控制
Order:检查次序
Order allow,deny(做白名单)默认拒绝, 只有明确允许的才有权限访问
Order deny,allow (做黑名单) 默认允许,只有明确拒绝的才拒绝访问
注意:apache会按照order决定最后使用哪一条规则,最后的规则生效
Allow from
Deny from
定义默认主页面
访问网站不指定具体资源路径时默认打开的页面,可以指定多个
DirecotryIndex index.html index.html.var
9.
10.
例如创建路径bbs/的目录别名为forum/在URL访问bbs/下的资源时,实际访问的是forum/目录下的资源
11.
12.基于用户的访问控制
例:
13.虚拟主机
补充:测试配置文件语法
①service httpd configtest
②httpd -t
实例1:基于IP的虚拟主机
(1)添加配置文件
(2)常见网页目录和网页文件并重读配置文件
实例2:
基于端口的虚拟主机
注意 可以混合使用
(1)添加监听端口并添加虚拟主机配置文件
(2)常见网页目录和网页文件并重读配置文件
实例3: 基于hostname的虚拟主机
(1)修改配置文件
httpd2.2需要启动NameVirtualHost 这一项 httpd2.4不需要,其中号表示的IP需要与添加的虚拟主机配置文件中表示的IP相同
(2)配置DNS或者本地主机映射
(3)重载并测试
14. 内置的status页面
测试
访问 httpd://IP/server-status
15.
http协议和httpd配置 2.2版本
(https 访问时默认端口为443 http为80)
1.
相对URL:相对路径,通常在同网站内使用
绝对URL:绝对路径,在同网站或不同网站内使用
2. http协议(是无状态服务):
http/0.9 , http/1.0 , http/1.1 , http/2.0
无状态服务:服务器无法持续追踪访问者来源,这样会导致无法判断来访者的身份,如果网站有访问控制机制 每次访问都需要账号密码验证身份。
cookie:每次客户端访问服务器就会在客户端硬盘产生一个cookie文件用来记录身份
cookie又分为胖cookie与瘦cookie,胖cookie可以记录客户端的访问行为甚至访问本地文件权限(比较危险)
session +瘦cookie :现在一般都是动态网站上每一个session对应一个瘦cookie来记录无状态服务客户端身份和在session上记录客户端的访问行为
3.一次http请求和响应叫一次事务,http报文由请求响应行、首部、数据组成,每次http请求响应的动作、资源定义、状态、安全认证等信息都是在若干首部定义配置的
3.1
3.2
3.3 headers
4.curl与elinks
5.
6.
7.压力测试工具
(1)能力有限的三款工具
ab (apache自带的压力测试工具)
webbench
http_load
(2)专业级的工具
jmeter (开源的)
loadrunner (商业级的,功能异常强大,有专门的认证)
(3)tcpcopy (中国研发的,模拟真实生产环境,把生产环境流量复制一份导入测试环境)
ab:(测试结果智能作为参考,可能只会是到达测试的80%就很不错了)
因为ab需要模拟并发,每个连接都会打开一个套接字文件,所以需要调整内核允许的用户文件打开数 ulimit -n
8.http -2.4
8.1
8.2 centos6 上安装httpd2.4
apr:由于http是安装在多中系统中的程序,所以apr可以消除不通系统环境中底层差异
http-2.4版本需要依赖 apr-1.4+ 以上版本和apr-util-1.4+以上版本的安装包环境,centos6中apr是低于这个版本要求的,又由于apr 不只有http依赖它可能还有其他程序,所以不能进行升级,只能源码包编译安装
8.3 centos7 上的httpd上的差异
(1)配置文件与控制服务
(2)配置
服务器脚本只需要少量改动cenytos6上的rc.d下的执行脚本的程序路径