http
文本编码协议
无状态(cookie,session)
http协议实现的程序
静态(httpd, nginx, lighttpd)
动态 (IIS, tomcat, jetty, jboss, resin, websphere, weblogic, oc4j)
客户端工具 (telnet, elinks, curl) 纯文本协议访问工具
HTTPD配置(端口、别名、访问控制、MPM、keep-alive、dso、DocumentRoot、DirectoryIndex、默认字符集、虚拟主机、mod_deflate模块、HTTPS配置)
HTTPD工具(htpasswd, apxs, rotatelogs, suexec),HTTPD压力测试(ab, webbench, http_load, jmeter, loadrunner, tcpcopy)
ASF: Apache Software Foundation Apache 软件基金会
FSF: Free Software Foundaton 自由软件基金会
ASF赖以起家的是: httpd<命名:apache>
http协议实现
Http特性
模块化设计:DSO(Dynamic Share Object)
MPM机制(Multipurpose Process Modules) 多路处理模块
HTTP安装
# yum info httpd //The Apache HTTP Server is a powerful, efficient, and extensible //强大、高效、可扩展
/etc/httpd //ServerRoot /etc/httpd/conf.d //配置片段目录 /etc/httpd/conf/httpd.conf //主配置 /etc/httpd/logs //日志目录 /etc/httpd/modules //模块目录 /etc/httpd/run //运行中的进程的数据 /etc/rc.d/init.d/httpd //服务脚本 /etc/sysconfig/httpd //服务脚本配置 /usr/lib/httpd/modules /usr/lib/httpd/modules/mod_actions.so //DSO机制,动态共享对象 /usr/sbin/apachectl //apachectl程序 /usr/sbin/httpd //MPM为IO,串行响应的进程 /usr/sbin/httpd.event //MPM为复用I/O模型,并行响应的进程 <2.2的httpd,event不成熟> /usr/sbin/httpd.worker //MPM............................. //ps axu | fgrep httpd可查看 /usr/share/doc/httpd-2.2.15 ///usr/share/doc/httpd-2.2.15/ABOUT_APACHE /usr/share/doc/httpd-2.2.15/CHANGES /usr/share/doc/httpd-2.2.15/LICENSE /usr/share/doc/httpd-2.2.15/NOTICE /usr/share/doc/httpd-2.2.15/README /usr/share/doc/httpd-2.2.15/VERSIONING /usr/share/man/man8/apachectl.8.gz // /usr/share/man/man8/htcacheclean.8.gz /usr/share/man/man8/httpd.8.gz /usr/share/man/man8/rotatelogs.8.gz /usr/share/man/man8/suexec.8.gz /var/cache/mod_proxy //<缓存目录> /var/lib/dav //<程序运行中的数据> /var/log/httpd //《日志目录》 /var/run/httpd //《运行中的httpd进程的数据》 /var/www/error/ //错误页面html网页存放目录 /var/www/html //DocuRoot目录,资源路径的根映射的位置
httpd配置文件
/etc/httpd/conf/httpd.conf //首次配置需要备份文件: # cp -v /etc/httpd/conf/httpd.conf{,.bak}
配置文件格式
# fgrep 'Section' /etc/httpd/conf/httpd.conf ### Section 1: Global Environment //全局环境:定义httpd通用功能特性 ### Section 2: 'Main' server configuration //主配置段:一个服务器提供单个站点 ### Section 3: Virtual Hosts //虚拟主机:一个服务器提供多个站点
配置指令格式
Directive(指令) Value(值) 指令:不区分大小写 值:可能区分大小写
HTTPD配置及应用
+++++++++++++++++++++++++++++++++++++++++++++++++++++
1、port
使用示例
+++++++++++++++++++++++++++++++++++++++++++++++++++++
2、持久和非持久连接
//并发访问量过大场景,时间或数量限制过大时,可能会导致后续的请求被[拒绝服务],可以关闭或调整时间或数量限制
不同版本对应的特性
<默认配置:关闭持久连接功能
重载并验证
# service httpd reload
<修改配置:开启持久连接功能
重载并验证
# service httpd reload
+++++++++++++++++++++++++++++++++++++++++++++++++++++
3、MPM 并发响应模型Multipath Process Module
10多种[适用在多种平台之上] Linux: prefork, worker, event 编译时,一次只能编译单个模块
1)查看当前使用的模块
2)查看装载的模块
3)更换MPM
使用示例
更改为worker # awk '$1 != "#" && $0 !~ /^[[:space:]]*$/{print}' /etc/sysconfig/httpd #HTTPD=/usr/sbin/httpd.worker HTTPD=/usr/sbin/httpd.worker #OPTIONS= #HTTPD_LANG=C #PIDFILE=/var/run/httpd/httpd.pid # service httpd restart # ps axu | fgrep httpd root 20183 0.0 1.4 11716 3560 ? Ss 22:02 0:00 /usr/sbin/httpd.worker apache 20298 0.0 1.2 289448 3000 ? Sl 22:02 0:00 /usr/sbin/httpd.worker 更改为event # awk '$1 != "#" && $0 !~ /^[[:space:]]*$/{print}' /etc/sysconfig/httpd #HTTPD=/usr/sbin/httpd.worker HTTPD=/usr/sbin/httpd.event #OPTIONS= #HTTPD_LANG=C #PIDFILE=/var/run/httpd/httpd.pid # service httpd restart # ps axu | fgrep httpd root 20360 0.6 1.4 12184 3556 ? Ss 22:04 0:00 /usr/sbin/httpd.event apache 20363 0.0 1.1 289916 2916 ? Sl 22:04 0:00 /usr/sbin/httpd.event apache 20364 0.0 1.1 289916 2904 ? Sl 22:04 0:00 /usr/sbin/httpd.event apache 20365 0.0 1.1 289916 2904 ? Sl 22:04 0:00 /usr/sbin/httpd.event
MPM配置详解 /etc/httpd/conf/httpd.conf <网站的承载能力有一定影响>
# prefork MPM # StartServers: 启动服务器后,预留的进程数 # MinSpareServers: minimum number of server processes which are kept spare # MaxSpareServers: maximum number of server processes which are kept spare # ServerLimit: 服务器的生命周期内为MaxClients准备的最大值 # MaxClients: 最大并发数 # MaxRequestsPerChild: 每个进程最大响应请求数StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 256 MaxClients 256 MaxRequestsPerChild 4000 # worker MPM # StartServers: 启动服务预留进程数 # MaxClients: 最大并发数 # MinSpareThreads: 最小并发数 # MaxSpareThreads: maximum number of worker threads which are kept spare # ThreadsPerChild: 每个进程内的线程数 # MaxRequestsPerChild: 每个线程最多响应请求数StartServers 4 MaxClients 300 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 //0表示没有上限 配置:影响网站的承载能力
PV承载量= \(每秒请求资源数 * 86400 \)/每个页面的资源数 //满载工作
考虑:全天满负荷运行?带宽使用大小?
带宽:每个PV消耗多少KB * PV承载量
使用示例
查看此模块已经被装载 # httpd -M | fgrep deflate_module deflate_module (shared) 禁用 # vim /etc/httpd/conf/httpd.conf #LoadModule deflate_module modules/mod_deflate.so 重载 # service httpd reload 查看 # httpd -M | fgrep deflate_module Syntax OK
+++++++++++++++++++++++++++++++++++++++++++++++++++++
4、URL资源路径映射之一:DocRoot <资源路径的根映射为文件系统的哪个目录>
使用示例:
# setenforing 0 # iptables -F # cat > /var/www/html/index.html << EOFMageEdu Hello
EOF # httpd -t && service httpd reload # yum install elinks # elinks -dump 127.0.0.1 抓取后退出 Hello [1]haha References Visible links 1. https://s5.51cto.com/wyfs02/M00/07/31/wKiom1nEuS7Tii_KAAA2TqP_0qY316.png
修改配置/etc/httpd/conf/httpd.conf DocumentRoot "/www/htdocs" # install -d /www/htdocs # cat > /www/htdocs/index.html << EOF hello everyone EOF # # httpd -t && service httpd reload # curl 127.0.0.1 hello everyone
+++++++++++++++++++++++++++++++++++++++++++++++++++++
5、站点访问控制
+++++++++++++++++++++++++++++++++++++++++++++++++++++
6、默认主页面
DirectoryIndex index.html index.html.var
自左向右,依次匹配给出目录下的文件,存在时,显示
7、文件系统路径访问控制
7、1基于来源地址
使用示例
>>>>>>>>>>>>>>>>>>>>>>>>Indexes<下载站使用>
>>>>>>>>>>>>>>>>>>>>>>>>FollowSymlinks
>>>>>>>>>>>>>>>>>>>>>>>>来源地址访问控制
7、2用户访问控制
安全域:认证后方能访问的目录,应该用名称标识
定义在/etc/httpd/conf/httpd.conf文件中
1)基于用户认证
2)基于组认证
使用示例
1、创建目录,使之能访问
# install -d /www/htdocs/admin # echo "hello" > /www/htdocs/admin/index.html
2、添加配置
Options None AllowOverride None AuthType Basic AuthName "Administrator private" AuthUserFile "/etc/httpd/conf.d/.htpasswd" Require valid-user
# httpd -t # service httpd reload # htpasswd -c -m /etc/httpd/conf.d/.htpasswd tom # htpasswd -m /etc/httpd/conf.d/.htpasswd obama # htpasswd -m /etc/httpd/conf.d/.htpasswd obama
3、添加组配置
Options None AllowOverride None AuthType Basic AuthName "Administrator private" AuthUserFile "/etc/httpd/conf.d/.htpasswd" AuthGroupFile "/etc/httpd/conf.d/.htgroup" Require group weblogic
# httpd -t # service httpd reload
8、日志设定
错误日志
1、日志为链接路径
访问日志
官方:httpd.apache.org http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#logformat Documetation --> 2.2 --> 日志文件
9、路径别名
使用示例
##默认配置 # setenforce 0 # iptables -F # cat > /var/www/html/index.html << EOFMageEdu Hello
EOF # httpd -t && service httpd reload # curl 127.0.0.1 添加别名 ##注意配置文件中URL和路径后必须同时存在是否有/ # vim /etc/httpd/conf/httpd.conf Alias /bbs/ "/web/htdocs/" # httpd -t Syntax OK # install -d /web/htdocs # cat > /web/htdocs/index.html Test Page # cat /web/htdocs/index.html Test Page # service httpd reload ##注意访问有无/的区别 # curl 127.0.1.1/bbs404 Not Found Not Found
The requested URL /bbs was not found on this server.
Apache/2.2.15 (CentOS) Server at 127.0.1.1 Port 80 # curl 127.0.1.1/bbs/ Test Page
10、字符集设定
11、虚拟主机
虚拟主机的类型
基于名称完成不同虚拟主机的识别
封装时: HTTP首部、TCP首部、IP首部、帧首部..
Host: 浏览器键入的主机名 //"应用层首部"中附加,非通信子网
配置前提
虚拟主机配置格式
以下为编辑配置文件及执行的额外的命令
1、基于IP,配置虚拟主机(不易记,IP需要购买)
2、基于端口,配置虚拟主机(用的少)
3、基于Host,配置虚拟主机(在应用层封装Host首部即可)
12、内置的status页面,显示基本的进程信息,handler过滤用户的请求
基于用户的访问控制
13、mod_deflate 模块
通过此模块的功能,在输出时,过滤出纯文本文件压缩后响应给客户端
压缩后响应:节约网络带宽,消耗CPU时钟周期,提升用户体验
web服务器从本地磁盘加载内容:输入
将加载后的内容,响应给客户端:输出
配置指令解析
SetOutputFilter DEFLATE //调用输出过滤器: DEFLATE压缩过滤器
DEFLATE可以基于MIME类型过滤,只对过滤出来的纯文本文件,且大小达到一定值时才有必要压缩
DeflateCompressionlevel 9 //压缩比
BrowserMatch ^Mozilla/4 gzip-only-text/html //匹配到指定浏览器不压缩
使用示例
1、启动httpd服务进程,在Windows和Linux中分别测试
2、查看是否启用mod_deflate.so模块
# httpd -M | fgrep deflate deflate_module (shared) Syntax OK
3、添加压缩指令
备份配置文件 # cp -v /etc/httpd/conf/httpd.conf{,.bak} 在配置文件中添加如下指令 # 调用DEFLATE压缩过滤器,只对输出过滤 SetOutputFilter DEFLATE # DEFLATE过滤器,过滤出指定的MIME类型,仅对这些MIME类型的纯文本文件进行压缩 AddOutputFilterByType DEFLATE text/plain 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 # 压缩级别(0-9),级别越高越消耗cpu时钟周期 DeflateCompressionLevel 9 # 正则匹配此浏览器不压缩 BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
4、测试并启动
5、测试是否激活此功能
Linux测试
Windows测试
14、HTTPS配置
安全:通过密钥交换得来的对称密钥加密要发送的数据
加密的过程:需要消耗CPU时钟周期
SSL handshark需要消耗大量时间[降低用户体验]
HTTPD事务
HTTPS事务
SSL Hankshark
HTTPS流程
1、确保openssl程序存在 [root@localhost ~]# rpm -q --whatprovides `which openssl` openssl-1.0.1e-57.el6.i686 [root@localhost ~]# rpm -ql openssl /usr/lib/libcrypto.so.10 /usr/lib/libssl.so.10 /usr/bin/openssl [root@localhost ~]# rpm -qi openssl //A general purpose cryptography library with TLS implementation 在客户机间实现安全的通信,SSL/TLS的实现
1、创建CA
2、在HTTP服务器上生成请求
3、提交请求
scp命令是ssh客户端命令 # which scp /usr/local/dropbear/bin/scp # rpm -q --whatprovides /usr/bin/scp openssh-clients-5.3p1-122.el6.i686 # rpm -ql openssh-clients | grep bin /usr/bin/.ssh.hmac /usr/bin/scp /usr/bin/sftp //安全ftp /usr/bin/slogin /usr/bin/ssh // /usr/bin/ssh-add /usr/bin/ssh-agent /usr/bin/ssh-copy-id /usr/bin/ssh-keyscan
5、获取证书
6、配置Httpd支持https
7、配置文件(/etc/httpd/conf.d/ssl.conf)中添加如下内容
8、测试https访问相应的主机
Windows测试不用google测试:将CA公钥导入信任的颁发机构
Google对数字签名为SHA1,不会通过认证
Linux测试:
15、客户端工具
curl命令 A utility for getting files from remote servers (FTP, HTTP, and others)
elinks命令 A text-mode Web browser
telnet命令 connects to a host using the TELNET protocol
16、HTTPD相关的工具
[root@localhost ~]# rpm -ql httpd | grep bin /usr/sbin/apachectl //LSB脚本,验证# file /usr/sbin/apachectl /usr/sbin/httpd //prefork /usr/sbin/httpd.event //event /usr/sbin/httpd.worker //worker /usr/sbin/rotatelogs //日志滚动程序 /usr/sbin/suexec //临时切换httpd进程的属主,读取apache用户没有权限读取的文件 [root@localhost ~]# rpm -ql httpd-tools /usr/bin/ab //httpd内置的压力测试工具 /usr/bin/htdbm /usr/bin/htdigest /usr/bin/htpasswd //basic认证基于文件实现时,用到时生成密码的工具 /usr/bin/logresolve
htpasswd命令的使用
apachectl命令的使用 apache control
apxs命令 apache extend tools httpd-devel提供(develop 开发组件)
编译安装第3方模块或自己的模块,需要借助apxs (速率限制、ddos***防止、php基于模块)
rotatelogs 日志滚动工具
suexec 临时切换httpd子进程的身份,访问特殊权限的文件
17、压力测试
压力测试:bench mark
功能:
ab命令:
1、 ab发起的并发请求,并非服务器的承载量
,实际80%就应该不错了
。满载时,服务器不会有任何响应。
2、 测试出的网络带宽,并非网络带宽承载量
,实际大于此带宽才会有此性能
。带宽跑满时,网络跑不动了。
# ab -c 100 -n 10000 http://172.16.100.1 # -c 并发100个 # -n 总数10000个 # (满负荷的服务器承载量)
Server Software: Apache/2.2.15 //对方的服务端程序及版本 Server Hostname: localhost //对方的主体名 Server Port: 80 //服务器端的端口 Document Path: /admin/index //请求的URL资源路径 Document Length: 284 bytes //页面资源的大小 Concurrency Level: 100 //并发数(级别) Time taken for tests: 1.158 seconds //完成测试,消耗1.158s Complete requests: 1024 //共完成1024个请求数 Failed requests: 0 //错误请求数量 Write errors: 0 //写错误数量 Total transferred: 514272 bytes //总传输字节:1B(bytes) = 8bit HTML transferred: 299904 bytes //HTML传输:B 非HTML为:http首部、tcp首部、ip首部、链路层首部和尾部 Requests per second: 884.16 [#/sec] (mean) //平均每秒完成884个请求 Time per request: 1158.155 [ms] (mean) //平均每批请求经由的时间(一批请求就是并发数) 每并发100个所消耗的时间总和/总批数=平均每并发100个经由的时间 Time per request: 1.131 [ms] //平均每单个请求经由的时间 Transfer rate: 433.64 [Kbytes/sec] //网络带宽4M带宽:B 433KB --> 0.433 MB --> 3.5Mib 重要测试结果 min mean[+/-sd] median max //mean(非(min+max)/2) median中间 Connect: 0 141 289.6 32 1031 客户端建立连接(10000个请求内最短,最长,平均消耗时间) Processing: 30 206 283.7 104 913 服务端处理请求 Waiting: 0 189 285.6 83 911 服务端发送响应 Total: 81 347 378.3 134 1078 完成一次完整的请求(一次事务)