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

server/2024/9/24 5:32:16/

一、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:为每个连接创建一个单独的进程。适用于处理大量并发连接,但内存占用较高。

https://i-blog.csdnimg.cn/direct/44e5fe2003f94c109769f77a2cadefe7.png" width="891" />

  • worker:使用多进程和多线程混合模型。每个进程可以处理多个线程,减少了进程创建的开销,提高了效率。

https://i-blog.csdnimg.cn/direct/3c89bdebb6fa45d395f916ab2beb8213.png" width="890" />

  • event:专为高并发环境设计,使用了一种更高效的线程管理机制,能够处理更多的并发连接。

https://i-blog.csdnimg.cn/direct/f0244e44eaee4f1fb89f78bcfb3cea6d.png" width="901" /> 缺点:没有线程安全控制, 进程之间的 切换问题

选择哪种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]...

常用选项

-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...]   模拟 一些 操作


-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

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

https://i-blog.csdnimg.cn/direct/cca21abacc9a438b87c8bf51a959d246.png" width="1070" />

结果分析

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     945Percentage 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)


http://www.ppmy.cn/server/99771.html

相关文章

数据库逻辑删除时查询为什么不可用用like来进行查询?它们之间有什么转换吗?

1.首先可以查询我们的数据库字段&#xff0c;我们这里使用的是< bit(1) > 即只能存储一位&#xff0c;也只能是0或者1 2.在数据库操作中也被是涉及到逻辑删除时&#xff08;即使用某个字段来标识记录是否被删除&#xff0c;而不是从数据库中移除记录&#xff09;&#x…

【数据结构】五、树:6.平衡二叉树AVL

2.平衡二叉树AVL 文章目录 2.平衡二叉树AVL2.1定义2.2存储结构2.3查找2.4插入&#xff08;保持平衡&#xff09;2.4.1 LL平衡旋转(右单旋转)2.4.2 RR平衡旋转(左单旋转)2.4.3 LR平衡旋转(先左后右双旋转)2.4.4 RL平衡旋转(先右后左双旋转)2.4.5题解 2.5性能分析2.6删除 2.1定义…

http的发展历史,各版本的差异点,以及和https的区别

### HTTP的发展历史及各版本的差异点 HTTP/0.9 - **发布时间**&#xff1a;1991年 - **特点**&#xff1a; - 最初的HTTP协议版本&#xff0c;非常简单。 - 只支持GET方法&#xff0c;不支持请求头和响应头。 - 响应仅为纯文本&#xff0c;无法传输图片、音频等多媒体资…

llama factory 训练 TensorBoard 可视化

首先需要在 yaml 里设置两个参数&#xff1a; output_dir: /home/wangguisen/projects/LLaMA-Factory/weights/tensbox_demoreport_to: tensorboard logging_dir: /home/wangguisen/projects/LLaMA-Factory/weights/tensbox_demo/runs然后开始训练&#xff0c;在你的输出目录下…

LCM红外小目标检测

根据站内的matlab代码修改成python版本。 import numpy as np import matplotlib.pyplot as plt import cv2 from pylab import mpl# 设置中文显示字体 mpl.rcParams["font.sans-serif"] ["SimHei"]def LCM_computation(patch_LCM_in):row, col patch_L…

nodejs/node-sass/sass-loader三者版本对应关系(已解决)

基本前提&#xff1a;了解版本对应关系 示例&#xff1a; 我的nodejs&#xff1a;v14.21.3&#xff0c; 则package.json: "node-sass": "^4.14.1", "sass-loader": "^8.0.0",扩展&#xff1a; 查看node历史版本&#xff1a; Node.js…

java SPI实现类中注入spring bean对象

在项目中&#xff0c;用到了SPI来扩展一些功能&#xff0c;发现很多实现类中用到了bean对象&#xff0c;并且都是通过getBean的方式每次都去拿&#xff0c;感觉不是很方便&#xff0c;而且速度也没有直接使用对象快。 正好安排的工作就是优化那一块的代码&#xff0c;所以就改造…

统计回归与Matlab软件实现上(一元多元线性回归模型)

引言 关于数学建模的基本方法 机理驱动 由于客观事物内部规律的复杂及人们认识程度的限制&#xff0c;无法得到内在因果关系&#xff0c;建立合乎机理规律的数学模型数据驱动 直接从数据出发&#xff0c;找到隐含在数据背后的最佳模型&#xff0c;是数学模型建立的另一大思路…