apache
apache介绍
apache是个开源的网页服务器,也是个模块化的服务器。
apache可以支持SSL技术,支持多个虚拟主机。
apache是以进程为基础的架构,进程要比线程消耗更多的系统开支,不太适合多处理器环境,因此在一个apache web 站点扩容时,通常是增加服务器或扩充集群节点而不是增加处理器。
apache的特性
1.支持HTTP/1.1通信协议
2.拥有简单而强有力的基于文件的配置过程
3.支持通用网关接口
4.支持基于IP和基于域名的虚拟主机
5.支持多种方式的HTTP认证
6.集成Perl处理模块
7.集成代理服务器模块
8.支持实时监视服务器状态和定制服务器日志
9.支持服务器端包含指令(SSI)
10.支持安全Socket层(SSL)
11.提供用户会话过程的跟踪
12.支持FastCGI
13.通过第三方模块可以支持JavaServlets
apache的功能
虚拟主机
IP 、Port 、FQDN
CGI :Common Gateway Interface ,通用网关接口
反向代理
负载均衡
路径别名
丰富的用户认证机制
basic
digest
支持第三方模块
apache优缺点
apache的优点
rewrite ,比nginx的rewrite 强大
rewrite是一种服务器的重写脉冲技术,它可以使得服务器可以支持 URL 重写,它还可以实现限制特定IP访问网站的功能。
模块超多,基本想到的都可以找到
少bug ,nginx 的bug相对较多
超稳定
需要性能的web服务就用nginx ,如果不需要性能只求稳定那就apache
apache适合做动态,稳定且功能强
apache的缺点
apache相对于nginx占用的内存及资源较多
apache的抗并发能力没有nginx强,apache处理请求是采用阻塞型的。
apache稳定性好但性能没有nginx好。
httpd介绍
1》httpd
20世纪90年代初,国家超级计算机应用中心NCSA开发,1995年开源社区发布apache (a patchy server)
ASF:apache software foundation
FSF:Free Software Foundation
2》特性:
高度模块化:core + modules
DSO: Dynamic Shared Object 动态加/卸载
MPM:multi-processing module 多路处理模块
3》MPM工作模式
1)prefork:
多进程I/O 模型,每个进程响应一个请求,默认模型。
一个主进程:
生成和回收n个子进程,创建套接字,不响应请求。
多个子进程:
工作work进程,每个子进程处理一请求。
系统初始时,预先生成多个空闲进程,等待请求,最大不超过1024个。
![](https://images2018.cnblogs.com/blog/1250974/201802/1250974-20180223114705013-2104636226.png)
2)worker:
复用的多进程I/O 模型, 多进程多线程,IIS 使用此模型。
一个主进程:
生成m个子进程,每个子进程负责生成n个线程,每个线程响应一个请求,并发响应请求为m*n。
![](https://images2018.cnblogs.com/blog/1250974/201802/1250974-20180223114716219-612945086.png)
3)event:
事件驱动模型(worker模型的变种)
一个主进程:
生成m个子进程,每个进程直接响应n个请求,并发响应请求:m*n。
有专门的线程来管理这些keep-alive 类型的线程,当有真实请求时,将请求传递给服务线程,执行完毕后,又允许释放。
这样增强了高并发场景下的请求处理能力。
在centos6中httpd-2.2的event是测试版,在centos7中httpd-2.4的event是稳定版。
![](https://images2018.cnblogs.com/blog/1250974/201802/1250974-20180223114728163-1259293637.png)
4》进程角色
![](https://images2018.cnblogs.com/blog/1250974/201802/1250974-20180223114741123-1222132506.png)
5》httpd功能特性
虚拟主机
IP 、Port 、FQDN
CGI :Common Gateway Interface ,通用网关接口
反向代理
负载均衡
路径别名
丰富的用户认证机制
basic
digest
支持第三方模块
6》httpd安装
版本:
CentOS 6: 2.2
CentOS 7: 2.4
安装方式:
rpm :centos 发行版,稳定,建议使用
编译:定制或特殊需求
https :http over ssl
1》SSL 会话的简化过程
(1) 客户端发送可供选择的加密方式,并向服务器请求证书
(2) 服务器端发送证书以及选定的加密方式给客户端
(3) 客户端取得证书并进行证书验证
如果信任给其发证书的CA
(a) 验证证书来源的合法性,用CA 的公钥解密证书上数字签名
(b) 验证证书的内容的合法性:完整性验证
(c) 检查证书的有效期
(d) 检查证书是否被吊销
(e) 证书中拥有者的名字,与访问的目标主机要一致
(4) 客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换
(5) 服务用此密钥加密用户请求的资源,响应给客户端
注意:SSL 是基于IP地址实现, 单IP的主机仅可以使用一个https
2》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]
3》http 重定向https
将http 请求转发至https 的URL
重定向
Redirect [status] URL-path URL
status 状态:
Permanent:Returns a permanent redirect status(301) indicating that the resource has movedpermanently
Temp:Returns a temporary redirect status (302).This is the default
示例:
Redirect temp / https://www.magedu.com/
4》HSTS
HSTS:HTTP Strict Transport Security
服务器端配置支持HSTS 后,会在给浏览器返回的HTTP 首部中携带HSTS 字段。
浏览器获取到该信息后,会将所有HTTP 访问请求在内部做307 跳转到HTTPS ,而无需任何网络过程。
HSTS preload list
是Chrome 浏览器中的HSTS 预载入列表,在该列表中的网站,使用Chrome 浏览器访问时,会自动转换成HTTPS 。
Firefox 、Safari、 Edge 浏览器也会采用这个列表。
实现HSTS 示例:
vim /etc/httpd/conf/httpd.conf
Header always set Strict-Transport-Security "max-age=15768000"
RewriteEngine on
RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301]
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
suexec :访问某些有特殊权限配置的资源时,临时切换至指定用户身份运行
ab:apache benchmark
6》httpd 的压力测试工具
ab, webbench, http_load, seige
Jmeter开源
Loadrunner商业,有相关认证
tcpcopy:网易,复制生产环境中的真实请求,并将之保存
ab [OPTIONS] URL
来自httpd-tools包
-n :总请求数
-c :模拟的并行数
-k :以持久连接模式测试
ulimit –n # 调整能打开的文件数