一、apache几个重要概念
Apache 是一款开源 Web 服务器软件,在Web服务器(如Apache HTTP Server)和软件开发中,高度模块化 、DSO(Dynamic Shared Object) 和MPM(Multi-Processing Module)是几个关键概念,它们对于提升系统的灵活性、可扩展性和性能至关重要。下面是对这些概念的详细解释:
1.1、高度模块化:core + modules
高度模块化指的是软件或系统被设计成由多个独立的、可互换的模块组成。这些模块可以独立开发、测试和维护,而不需要修改其他模块的代码。在Web服务器(如Apache)的上下文中,这通常意味着服务器核心(core)提供基本的服务和框架,而特定的功能则通过加载额外的模块(modules)来实现。
- Core(核心):提供基本的服务器功能和API,供模块调用。它负责处理网络请求、管理进程、内存和线程等。
- Modules(模块):是可插拔的代码块,用于扩展服务器的功能。例如,有的模块负责处理特定的请求类型(如CGI、PHP),有的模块用于认证和授权,还有的模块提供缓存功能等。
这种模块化设计的好处包括:
- 灵活性:可以根据需要启用或禁用模块,以适应不同的应用场景。
- 可扩展性:容易添加新的功能,只需开发相应的模块即可。
- 可维护性:各个模块相对独立,便于单独测试和修复问题。
1.2、DSO(Dynamic Shared Object)
动态加载/卸载,DSO(Dynamic Shared Object)是一种在Unix-like系统上使用的动态链接库格式。在Web服务器的上下文中,DSO允许服务器在运行时动态地加载和卸载模块,而不需要重启服务器。这意味着可以在不中断服务的情况下更新或替换模块,提高了系统的可用性和灵活性。
DSO模块通常以.so
(在Linux和类Unix系统上)或.dylib
(在MacOS上)为文件扩展名。使用DSO模块,管理员可以根据需要动态地调整服务器的功能,以适应不同的流量模式和用户需求。
1.3、MPM(Multi-Processing Module)
多路处理模块,MPM(Multi-Processing Module)是Apache HTTP Server中用于处理并发连接的一种机制。
Apache HTTP Server支持多种MPM模型,以适应不同的操作系统和硬件配置。这些模型决定了服务器如何创建和管理工作进程(或线程)来处理客户端请求。
常见的MPM模型包括:
- prefork:为每个连接创建一个单独的进程。适用于处理大量并发连接,但内存占用较高。
- worker:使用多进程和多线程混合模型。每个进程可以处理多个线程,减少了进程创建的开销,提高了效率。
- event:专为高并发环境设计,使用了一种更高效的线程管理机制,能够处理更多的并发连接。
缺点:没有线程安全控制, 进程之间的 切换问题
选择哪种MPM模型取决于服务器的硬件配置、预期的负载以及管理员的偏好。MPM的设计使得Apache HTTP Server能够灵活地适应不同的应用场景,从而提供高性能和可靠的服务。
版本
httpd-2.4:event 稳定版,centos7 以后默认
httpd-2.2:event 测试版,centos6 默认
二、处理应对状态码的一些方法
错误代码 | 错误描述 | 故障问题分析 |
---|---|---|
403 | Forbidden(禁止访问该页面) | ①权限设置不正确②IP地址限制(访问控制:防火墙规则)③身份验证(如登录用户检查) |
404 | Not Found(服务器无法找到被请求的页面) | ①URL路径错误②资源被删除或移动 |
500 | Internal Server Error(内部服务器错误) | ①程序错误(服务端应用程序bug,检查服务端程序日志进行修复)②数据库问题(查询失败或连接资源耗尽)③服务器配置(服务端配置文件不正确,更新服务器版本也可能导致) |
502 | Bad Gateway(无效网关) | ①后端服务器出现故障(检查上游服务器健康状态:响应)②代理服务器设置问题(查看配置或网络是否不可达导致不能转发到后端地址) |
503 | Service Unavailable(当前服务不可用) | ①服务器过载(服务器占用率100%,网络流量过大)②服务临时维护:不提供服务(要做网页说明) |
504 | Gateway Timeout(网关请求超时) | ①后端服务响应延迟(上游服务器响应时间和可用性)②网络问题(分析网络连接、路由器是否有故障或瓶颈,是否因网络调整导致超时) |
2.1、请简单描述下静态页面和动态页面
①静态页面是指在请求时,页面内容不会再服务端生成或处理,而是直接返回给客户端展示的页面。
通常情况下,这种页面的内容是固定的,随着时间推移不会发生任何变化,比如公司的主页或者产品介绍页面等。
②动态页面则是需要在服务端进行一些处理,才能生成最终页面的网页。
在请求时,服务端会根据用户的请求或者一些其他条件动态地生成网页内容,再将最终的页面返回给客户端。
动态页面和静态页面不同,它们能够根据数据变化实时更新页面展示内容,比如购物网站的商品列表页面
**三、**Wget相关工具(以及扩展curl)
格式
wget [OPTION]... [URL]...
常用选项
bash
-q 静默模式
-c 断点续传
-P /path 保存在指定目录
-O filename 保存为指定文件名,filename 为 - 时,发送至标准输出
--limit-rate= 指定传输速率,单位K,M等
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...] 模拟 一些 操作
bash
-A/--user-agent <string> 设置用户代理发送给服务器
-e/--referer <URL> 来源网址
--cacert <file> CA证书 (SSL)
-k/--insecure 允许忽略证书进行 SSL 连接
--compressed 要求返回是压缩的格式
-H/--header "key:value" 自定义首部字段传递给服务器
-i 显示页面内容,包括报文首部信
-I/--head 只显示响应报文首部信息
-D/--dump-header <file>将url的header信息存放在指定文件中
--basic 使用HTTP基本认证
-u/--user <user[:password]>设置服务器的用户和密码
-L 如果有3xx响应码,重新发请求到新位置
-O 使用URL中默认的文件名保存文件到本地
-o <file> 将网络文件保存为指定的文件中
--limit-rate <rate> 设置传输速度
-0/--http1.0 数字0,使用HTTP 1.0
-v/--verbose 更详细
-C 选项可对文件使用断点续传功能
-c/--cookie-jar <file name> 将url中cookie存放在指定文件中
-x/--proxy <proxyhost[:port]> 指定代理服务器地址
-X/--request <command> 向服务器发送指定请求方法
-U/--proxy-user <user:password> 代理服务器用户和密码
-T 选项可将指定的本地文件上传到FTP服务器上
--data/-d 方式指定使用POST方式传递数据
-s --silent Silent mode-b name=data 从服务器响应set-cookie得到值,返回给服务器
-w <format> 显示相应的指定的报文信息,如:%{http_code},%{remote_ip}等
-m, --max-time <time> 允许最大传输时间
curl www.163.com -vA chrome
冒充 chrome 浏览器
获取状态码
curl -s -I -m10 -o /dev/null -w %{http_code} http://www.baidu.com/
服务器地址
curl -s -I -m10 -o /dev/null -w "%{remote_ip}\n" http://www.bnaidu.com
端口
local_port
四、压力测试工具
httpd的压力测试工具:
- ab, webbench, http_load, seige
- Jmeter 开源
- Loadrunner 商业,有相关认证
- tcpcopy:网易,复制生产环境中的真实请求,并将之保存
ab 来自httpd-tools包,所以需要
yum -y install httpd-tools
测试安装是否成功:ab -V
命令格式
ab [OPTIONS] URL
选项
n:总请求数 -c:模拟的并发数 -k:以持久连接模式测试
模拟10个用户,对百度首页发起1000次请求
ab -c 10 -n 1000 http://192.168.88.79/index.php
在压测时候会显示被压测服务器的版本号
结果分析
bash
Server Software: Apache #服务器软件
Server Hostname: json.im #域名
Server Port: 80 #请求端口号
Document Path: / #文件路径
Document Length: 40888 bytes #页面字节数
Concurrency Level: 10 #请求的并发数
Time taken for tests: 27.300 seconds #总访问时间
Complete requests: 1000 #请求成功数量
Failed requests: 0 #请求失败数量
Write errors: 0
Total transferred: 41054242 bytes #请求总数据大小(包括header头信息)
HTML transferred: 40888000 bytes #html页面实际总字节数
Requests per second: 36.63 [#/sec] (mean) #每秒多少请求,这个是非常重要的参数数值,服务器的吞吐量
Time per request: 272.998 [ms] (mean) #用户平均请求等待时间
Time per request: 27.300 [ms] (mean, across all concurrent requests)
# 服务器平均处理时间,也就是服务器吞吐量的倒数
Transfer rate: 1468.58 [Kbytes/sec] received #每秒获取的数据长度
Connection Times (ms)
min mean[+/-sd] median max
Connect: 43 47 2.4 47 53
Processing: 189 224 40.7 215 895
Waiting: 102 128 38.6 118 794
Total: 233 270 41.3 263 945
Percentage of the requests served within a certain time (ms)
50% 263 #50%用户请求在263ms内返回
66% 271 #66%用户请求在271ms内返回
75% 279 #75%用户请求在279ms内返回
80% 285 #80%用户请求在285ms内返回
90% 303 #90%用户请求在303ms内返回
95% 320 #95%用户请求在320ms内返回
98% 341 #98%用户请求在341ms内返回
99% 373 #99%用户请求在373ms内返回
100% 945 (longest request)