Apache 连接与请求

Apache 连接与请求

如果这是一个基本问题,我提前道歉,但在阅读 Apache 文档和其他教程后,我感到很困惑。

单个 Apache prefork 进程是否能为给定客户端提供所有 HTTP 请求?我是这样认为的,但是当我将 maxclients 减少到一个较低的数字时,我的页面加载时间就会变得很慢。尽管我是该服务器上唯一的客户端。这表明每个进程一次只能处理一个 HTTP 请求,而不是在超时窗口内处理所有请求。

因此,如果单个网页需要 15 个 HTTP 请求才能完全加载,我是否需要 15 个 prefork Apache 进程才能最佳地为其提供服务?

答案1

按照我们通常思考 HTTP 协议的方式,这不应该是个问题。

现代浏览器使用活着连接,每次只能承载一个请求;从这个意义上讲,使用MaxClients 1不应该产生影响,因为这些连接中的每个请求都在下一个请求开始之前完成。

然而,现代浏览器还有另一个特点:它们使用多个连接。如今,您可能会得到一个需要加载 40 个其他资源的 html 页面:图像、javascript、css。从效率的角度来看,将它们全部堆积成单个文件并通过一个连接发送没有多大意义;相反,它们被分成几个连接(每个连接仍然是单个文件)以同时获取。

我找不到关于每个浏览器行为的权威信息来源,但是我能找到什么这表明 6 个连接是正常的。这时服务器的并发性就开始发挥作用了;这 6 个连接中的每一个都可以同时请求资源,从服务器的角度来看,它们充当 6 个不同的客户端。

答案2

mpm_prefork只会响应一个连接。如果您希望 Apache 每个进程为多个连接提供服务,则需要使用多线程 MPM,例如mpm_worker

现代浏览器使用管道(多个同时连接)和保持活动(在同一连接上序列化请求)来提高吞吐量和网络效率并降低延迟。例如,可以通过更改network.http.pipeliningnetwork.http.pipelining.maxrequests配置Mozilla Firefoxabout:config

相关内容