Apache连接与请求

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

一个Apache prefork进程是否为给定的客户端提供所有的HTTP请求? 这就是我的想法,但是当我将maxclient减less到一个较低的数字时,我的页面加载时间就被抓取了。 尽pipe事实上我是服务器上唯一的客户端。 这将build议每个进程一次提供一个HTTP请求,而不是在TimeOut窗口内提供所有请求。

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

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

现代浏览器使用保持连接,一次只能携带一个请求; 从这个意义上讲,使用MaxClients 1不应该有影响,因为这些连接中的每个请求都在下一次启动之前完成。

但是,这是现代浏览器的另一件事情。 他们使用多个连接。 现在,你可能会得到一个需要加载40个其他资源的html页面; 图像,JavaScript,CSS。 从效率的angular度来看,把所有的单个文件都通过一个连接发送出去没有什么意义, 相反,它们被分成几个连接(每个连接仍然是单个文件)同时获取。

对于每个浏览器的行为,我找不到一个好的权威信息来源,但是我能发现 ,6个连接是正常的。 这是您的服务器并发性发挥作用的地方; 这6个连接中的每一个都可以同时请求一个资源,从服务器的angular度来看,它们充当了6个不同的客户端。

mpm_prefork只会回答一个连接。 如果您希望apache为每个进程提供多个连接,则需要使用mpm_worker类的multithreadingMPM。

现代浏览器使用stream水线(多个同时连接)和保持活动(在同一连接上的串行化请求)来提高吞吐量和networking效率并降低延迟。 例如Mozilla Firefox可以通过在about:config更改network.http.pipeliningnetwork.http.pipelining.maxrequests进行about:config