• apache几个重要概念和处理应对状态码的一些方法


    一、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 默认

    二、处理应对状态码的一些方法

    错误代码错误描述故障问题分析
    403Forbidden(禁止访问该页面)①权限设置不正确②IP地址限制(访问控制:防火墙规则)③身份验证(如登录用户检查)
    404Not Found(服务器无法找到被请求的页面)①URL路径错误②资源被删除或移动
    500Internal Server Error(内部服务器错误)①程序错误(服务端应用程序bug,检查服务端程序日志进行修复)②数据库问题(查询失败或连接资源耗尽)③服务器配置(服务端配置文件不正确,更新服务器版本也可能导致)
    502Bad Gateway(无效网关)①后端服务器出现故障(检查上游服务器健康状态:响应)②代理服务器设置问题(查看配置或网络是否不可达导致不能转发到后端地址)
    503Service Unavailable(当前服务不可用)①服务器过载(服务器占用率100%,网络流量过大)②服务临时维护:不提供服务(要做网页说明)
    504Gateway Timeout(网关请求超时)①后端服务响应延迟(上游服务器响应时间和可用性)②网络问题(分析网络连接、路由器是否有故障或瓶颈,是否因网络调整导致超时)

    2.1、请简单描述下静态页面和动态页面


    ①静态页面是指在请求时,页面内容不会再服务端生成或处理,而是直接返回给客户端展示的页面。
    通常情况下,这种页面的内容是固定的,随着时间推移不会发生任何变化,比如公司的主页或者产品介绍页面等。

    ②动态页面则是需要在服务端进行一些处理,才能生成最终页面的网页。
    在请求时,服务端会根据用户的请求或者一些其他条件动态地生成网页内容,再将最终的页面返回给客户端。
    动态页面和静态页面不同,它们能够根据数据变化实时更新页面展示内容,比如购物网站的商品列表页面

    三、Wget相关工具(以及扩展curl)

    格式

    wget   [OPTION]... [URL]...

    常用选项

    1. -q 静默模式
    2. -c 断点续传
    3. -P /path 保存在指定目录
    4. -O filename 保存为指定文件名,filename 为 - 时,发送至标准输出
    5. --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...]   模拟 一些 操作

    1. -A/--user-agent 设置用户代理发送给服务器
    2. -e/--referer 来源网址
    3. --cacert CA证书 (SSL)
    4. -k/--insecure 允许忽略证书进行 SSL 连接
    5. --compressed 要求返回是压缩的格式
    6. -H/--header "key:value” 自定义首部字段传递给服务器
    7. -i 显示页面内容,包括报文首部信
    8. -I/--head 只显示响应报文首部信息
    9. -D/--dump-header 将url的header信息存放在指定文件中
    10. --basic 使用HTTP基本认证
    11. -u/--user 设置服务器的用户和密码
    12. -L 如果有3xx响应码,重新发请求到新位置
    13. -O 使用URL中默认的文件名保存文件到本地
    14. -o 将网络文件保存为指定的文件中
    15. --limit-rate 设置传输速度
    16. -0/--http1.0 数字0,使用HTTP 1.0
    17. -v/--verbose 更详细
    18. -C 选项可对文件使用断点续传功能
    19. -c/--cookie-jar 将url中cookie存放在指定文件中
    20. -x/--proxy 指定代理服务器地址
    21. -X/--request 向服务器发送指定请求方法
    22. -U/--proxy-user 代理服务器用户和密码
    23. -T 选项可将指定的本地文件上传到FTP服务器上
    24. --data/-d 方式指定使用POST方式传递数据
    25. -s --silent Silent mode-b name=data 从服务器响应set-cookie得到值,返回给服务器
    26. -w 显示相应的指定的报文信息,如:%{http_code},%{remote_ip}等
    27. -m, --max-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

    在压测时候会显示被压测服务器的版本号

    结果分析

    1. Server Software: Apache #服务器软件
    2. Server Hostname: json.im #域名
    3. Server Port: 80 #请求端口号
    4. Document Path: / #文件路径
    5. Document Length: 40888 bytes #页面字节数
    6. Concurrency Level: 10 #请求的并发数
    7. Time taken for tests: 27.300 seconds #总访问时间
    8. Complete requests: 1000 #请求成功数量
    9. Failed requests: 0 #请求失败数量
    10. Write errors: 0
    11. Total transferred: 41054242 bytes #请求总数据大小(包括header头信息)
    12. HTML transferred: 40888000 bytes #html页面实际总字节数
    13. Requests per second: 36.63 [#/sec] (mean) #每秒多少请求,这个是非常重要的参数数值,服务器的吞吐量
    14. Time per request: 272.998 [ms] (mean) #用户平均请求等待时间
    15. Time per request: 27.300 [ms] (mean, across all concurrent requests)
    16. # 服务器平均处理时间,也就是服务器吞吐量的倒数
    17. Transfer rate: 1468.58 [Kbytes/sec] received #每秒获取的数据长度
    18. Connection Times (ms)
    19. min mean[+/-sd] median max
    20. Connect: 43 47 2.4 47 53
    21. Processing: 189 224 40.7 215 895
    22. Waiting: 102 128 38.6 118 794
    23. Total: 233 270 41.3 263 945
    24. Percentage of the requests served within a certain time (ms)
    25. 50% 263 #50%用户请求在263ms内返回
    26. 66% 271 #66%用户请求在271ms内返回
    27. 75% 279 #75%用户请求在279ms内返回
    28. 80% 285 #80%用户请求在285ms内返回
    29. 90% 303 #90%用户请求在303ms内返回
    30. 95% 320 #95%用户请求在320ms内返回
    31. 98% 341 #98%用户请求在341ms内返回
    32. 99% 373 #99%用户请求在373ms内返回
    33. 100% 945 (longest request)

  • 相关阅读:
    Python---数据序列中的公共方法
    互联网广告人--联合御寒--品牌,代理,平台,达人 多方携手御寒
    理解MTU VLAN与端口VLAN两个概念
    rhel8 nmcli学习
    【超详细】Visual Studio 创建DLL 、LIB及调用
    matlab之数组排序的方法和函数
    『现学现忘』Docker基础 — 36、CMD指令和ENTRYPOINT指令的区别
    向日葵远程分辨率过低解决办法
    Asp.net MVC中文件夹中的控制器如何跳转到根目录的控制器中?
    CF33b-B. String Problem
  • 原文地址:https://blog.csdn.net/YCyjs/article/details/140991573