15053971836 注册 / 登录

apache服务器默认的工作方式是

时间: 阅读:488
apache服务器默认的工作方式是

最佳回答

夜半丶唱情歌

夜半丶唱情歌

2023-01-12 23:02:26

apache作为现今web服务器用的最广泛也是最稳定的开源服务器软件,其工作模式有许多中,目前主要有两种模式:prefork模式和worker模式
一、两种模式
prefork模式:
prefork是Unix平台上的默认(缺省)MPM,使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接,效率高,但内存占用量比较大。
这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器,它的工作方式类似于Apache 1.3。它适合于没有线程安全库,需要避免线程兼容性问题的系统。它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求。
worker模式:
worker使用多个子进程,每个子进程有多个线程,每个线程在某个确定的时间只能维持一个连接,内存占用量比较小,适合高流量的http服务器。缺点是假如一个线程崩溃,整个进程就会连同其任何线程一起”死掉”,所以要保证一个程式在运行时必须被系统识别为”每个线程都是安全的”。
此多路处理模块(MPM)使网络服务器支持混合的多线程多进程。由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM。但是它也使用了多进程,每个进程又有多个线程,以获得基于进程的MPM的稳定性。
二、apache模式的查看和安装
1、常看当前模式
如果apache已经安装,我们可以用"httpd -l"命令查看当前模式。若找到 prefork.c 则表示当前工作在prefork模式,同理出现 worker.c 则工作在worker模式。
如果apache还未安装,我们在编译的时候可以加入 --with-pem=(prefork|worker) 选项决定启用什么模式。
2、切换模式
a. 将当前的prefork模式启动文件改名
mv httpd httpd.prefork
b. 将worker模式的启动文件改名
mv httpd.worker httpd
c. 修改Apache配置文件
vi /usr/local/apache2/conf/extra/httpd-mpm.conf
找到里边的如下一段,可适当修改负载等参数:
<IfModule mpm_worker_module>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
d. 重新启动服务
/usr/local/apache2/bin/apachectl restart
处于稳定性和安全性考虑,不建议更换apache2的运行方式,使用系统默认prefork即可。另外很多php模块不能工作在worker模式下,例如redhat linux自带的php也不能支持线程安全。所以最好不要切换工作模式。
三、prefork和worker模式的比较
prefork模式使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接。在大多数平台上,Prefork MPM在效率上要比Worker MPM要高,但是内存使用大得多。prefork的无线程设计在某些情况下将比worker更有优势:它可以使用那些没有处理好线程安全的第三方模块,并且对于那些线程调试困难的平台而言,它也更容易调试一些。
worker模式使用多个子进程,每个子进程有多个线程。每个线程在某个确定的时间只能维持一个连接。通常来说,在一个高流量的HTTP服务器上,Worker MPM是个比较好的选择,因为Worker MPM的内存使用比Prefork MPM要低得多。但worker MPM也由不完善的地方,如果一个线程崩溃,整个进程就会连同其所有线程一起"死掉"。由于线程共享内存空间,所以一个程序在运行时必须被系统识别为"每个线程都是安全的"。
总的来说,prefork方式速度要稍高于worker,然而它需要的cpu和memory资源也稍多于woker。

最新回答共有5条回答

  • 清风若雨
    回复
    2023-01-13 02:02:39

    前言

    今天我们来彻底聊聊,什么是TCP/IP、http、socket、长连接、短连接

    TCP/IP

    TCP/IP是协议组,分为三个层次:

    网络层传输层应用层。

    在网络层有:

    IP协议ICMP协议ARP协议RARP协议BOOTP协议

    在传输层中有:

    TCP协议UDP协议

    在应用层有:

    TCP包括:

    FTP协议HTTP协议TELNET协议SMTP协议

    UDP包括:

    DNS协议TFTP协议短连接

    流程:连接->传输数据->关闭连接

    HTTP是无状态的,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。

    也可以这样说:短连接是指SOCKET连接后发送后接收完数据后马上断开连接。

    长连接

    流程:连接 -> 传输数据 -> 保持连接 -> 传输数据 -> 。。。-> 关闭连接。

    长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。

    http的长连接

    HTTP也可以建立长连接的,使用Connection:keep-alive,HTTP 1.1默认进行长连接。

    HTTP1.1 和 HTTP1.0 相比较而言,最大的区别就是增加了长连接支持(貌似最新的 http1.0 可以显示的指定 keep-alive),但还是无状态的,或者说是不可以信任的。

    什么时候用长连接,短连接?

    长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况。

  • 無畏
    回复
    2023-01-13 02:02:39

    “我是哟哟吼说科技,专注于数据网络的回答,欢迎大家与我交流数据网络的问题”

    如题,一个完整的HTTP过程是怎样的?

    一个完整的HTTP过程包括建立连接、数据传输、断开连接等七个步骤。

    下面哟哟来详细介绍一下每一步:

    1、TCP建立连接

    HTTP协议是基于TCP协议来实现的,因此首先就是要通过TCP三次握手与服务器端建立连接,一般HTTP默认的端口号为80;

    2、浏览器发送请求命令

    在与服务器建立连接后,Web浏览器会想服务器发送请求命令

    3、浏览器发送请求头消息

    在浏览器发送请求命令后,还会发送一些其它信息,最后以一行空白内容告知服务器已经完成头信息的发送;

    4、服务器应答

    在收到浏览器发送的请求后,服务器会对其进行回应,应答的第一部分是协议的版本号和应答状态码;

    5、服务器回应头信息

    与浏览器端同理,服务器端也会将自身的信息发送一份至浏览器;

    6、服务器发送数据

    在完成所有应答后,会以Content-Type应答头信息所描述的格式发送用户所需求的数据信息;

    7、断开TCP连接

    在完成此次数据通信后,服务器会通过TCP四次挥手主动断开连接。但若此次连接为长连接,那么浏览器或服务器的头信息会加入keep-alive的信息,会保持此连接状态,在有其它数据发送时,可以节省建立连接的时间;

    欢迎大家多多关注我,在下方评论区说出自己的见解。

  • 無畏
    回复
    2023-01-13 02:02:39

    谢邀~

    我们打开浏览器,在地址栏输入www.wukong.com,几秒后浏览器打开的页面,那么这几秒钟内发生了哪些事情,我就带大家一起看看完整的流程:

    解析URL

    浏览器首先会对输入的URL进行验证,如果不合法的时候,那么会把输入的文字传给默认的搜索引擎,比如你只在地址栏输入“”几个字。

    如果URL通过验证,那么可以解析得到协议(http或者https)、域名(wukong)、资源(首页)等信息。

    DNS查询

    浏览器会先检查域名信息是否在缓存中。

    再检查域名是否在本地的Hosts文件中。

    如果还不在,那么浏览器会向DNS服务器发送一个查询请求,获得目标服务器的IP地址。

    TCP封包及传输

    这时候浏览器获得了目标服务器的IP(DNS返回)、端口(URL中包含,没有就使用默认),浏览器会调用库函数socket,生成一个TCP流套接字,也就是完成了TCP的封包。

    TCP封包完成之后,就可以传输了,在完成“你瞅啥”,“瞅你咋地”,“来,过来唠唠”一系列操作之后,浏览器和服务器就完成了TCP的三次握手,建立了连接,后面就可以请求服务器资源了。

    服务器接收请求并相应

    HTTP有很多请求方法,比如:GET/POST/PUT/DELETE等等,我们浏览器输入URL这种,是GET方法。

    服务器接收到GET请求,服务器根据请求信息,获得相应的相应内容。例如我们输入的是:www.wukong.com,那么意味着访问首页文件。

    浏览器解析并渲染

    浏览器从服务器拿到了想要访问的资源,大多数时候,这个资源就是HTML页面,当然也可能是一个其他类型的文件。

  • seo从业者
    回复
    2023-01-13 01:01:29

    apache httpd-2.4

    新增模块;

    mod_proxy_fcgi(可提供 fcgi 代理)

    mod_ratelimit(限制用户带宽)

    mod_request(请求模块,对请求做过滤)

    mod_remoteip(匹配客户端的 IP 地址)

    对于基于 IP 的访问控制做了修改,不再支持 allow,deny,order 机制,而是统一使用 require进行

    还新增以下几条新特性;

    1、MPM 支持在运行时装载;不过要开启这种特性,在编译安装要启用这三种功能;

    --enable-mpms-shared=all --with-mpm=event

    2、支持 event

    3、支持异步读写

    4、在每个模块及每个目录上指定日志级别

    5、增强版的表达式分析器

    6、每请求配置:<If>, <Elseif>

    7、毫秒级别的 keepalive timeout

    8、基于 FQDN 的虚拟主机不再需要 NameVirtualHost 指令

    9、支持使用自定义变量

    安装时HTTPd 可以添加许多模块

    相关模块解析:

    --enable-so:支持动态共享模块(即打开 DSO 支持)

    --enable-rewrite:支持