我应该在Apache2中激活keepAlive吗?

在任何默认安装中,Apache 2都会closureskeepAlive,但在另一台服务器上,keepAlive模块已打开。

那么,我怎么知道keepAlive是否适合我? 我在哪里可以find关于configuration这个好的例子?

已经有两个很好的答案,但也许最重要的现实生活中没有提到。

首先,OP可能需要阅读前面的两个答案和这个小博客 ,了解Keepalive是什么。 (作者没有详细说明TCPI / IP越来越“快”,连接打开的时间越长,这种情况的确如此,长时间的连接从IP窗口缩放中受益,但是除非文件是大,或者带宽延迟产品exception大)。

使用Apache时,对HTTP Keepalive的争论就是阻止Apache进程。 也就是说,使用Keepalive的客户端将阻止“他的”Apache进程为其他客户端服务,直到客户端closures连接或达到超时。 在同样的时间内,这个Apache实例可能已经服务了许多其他的连接。

现在,一个非常常见的Apacheconfiguration是Prefork MPM和一个PHP / Perl / Python解释器,以及上述语言中的应用程序代码。 在这种情况下,每个Apache进程都是“重”的,因为它占用了几兆字节的RAM(与解释器和应用程序代码链接的Apache)。 这和每个keepalive的Apache实例的阻塞一起是效率低下的。

常见的解决方法是使用2台Apache服务器(根据需要在同一台物理服务器上或2台服务器上)使用不同的configuration:

  • 一个“重”与mod_php(或使用任何编程语言)的dynamic内容,保持closures
  • 一个“轻量级”模块,用于提供静态内容(图像,CSS,JS等),保持活跃

然后,您可以在需要时扩展dynamic和静态内容的分离,例如:

  • 使用事件驱动的服务器来实现静态内容,比如nginx 。
  • 使用CDN静态内容(可以做所有静态内容为您服务)
  • 实现静态和/或dynamic内容的caching

避免阻塞Apache的另一个方法是使用负载均衡器和更聪明的连接处理,比如Perlbal 。

.. 以及更多。 🙂

Keepalives在某些情况下可能会很好,但在其他情况下会很糟糕。 它们减less了build立一个新连接的时间和精力,但是在keepalive超时期间它们占用了服务器资源。 例子:

  • 有许多小对象的页面,拨号上的客户端 – Keepalive应该打开。
  • 有几个大对象的页面 – Keepalive不会是一个优势。
  • 具有非常多的唯一访问者的服务器 – keepalive应该是closures的(否则,套接字和线程将坐在内存中,等待keepalive超时并且不为新客户端服务)。

正如您所看到的,KeepAliveTimeout在优化服务器性能方面也扮演着重要的angular色。

看看你的使用模式,并自己决定。

你一定要使用KeepAlive On。

看到:

http://httpd.apache.org/docs/2.0/mod/core.html#keepalive

这样一个单独的TCP连接将被浏览器重新使用来发送多个查询。 通常一个网站有很多组件(HTML页面,JavaScript代码,图片)。 只要这些资源在同一个域中,因此可以由同一个服务器来服务,因为浏览器不需要build立一个新的TCP连接,所以一个KeepAlive连接会大大提高性能。

浏览器通常打开3个并行连接到一个域。 所以假设你的网站有18个对象。 浏览器将打开3个连接,每个连接下载6个对象 – 使用KeepAlive模式。 如果没有KeepAlive,它将不得不打开18个TCP连接,这是非常缓慢的。

大多数或所有现代浏览器都符合HTTP / 1.1标准,所以这应该是正常的。

像squid这样的某些HTTP代理不符合HTTP / 1.1规范,但是它们仍然要求使用KeepAlive连接。