HTTP服务器使用Nginx+Apache的搭配,前者负责静态文件的读取,后者负责动态页面的处理。
首先是Apache参数KeepAlive
2.x版本的Apache配置该参数需要先启动一下外联配置文件
在httpd.conf中找到
#Various default settings
Include conf/extra/httpd-default.conf
把第二行前边的”#”去掉。
然后KeepAlive的参数就在以上路径的配置文件中。
下边是关于该参数的说明:
KeepAlive 是否允许持续连接
MaxKeepAliveRequests 允许的持续连接的最大数
KeepAliveTimeout 持续连接在没有请求多少秒后切段
前三个KeepAlive相关的指令用来设置持续连接。通常都是每个HTTP请求对应一个TCP连接,但对于包含许多图片的网页来说,客户端会在瞬间发出多个HTTP请求,此时多次建立TCP连接会大大降低响应速度,此时通过持续连接,可以允许用户在一个TCP连接中发出多个HTTP请求,减少TCP建立次数,提高响应速度。
这种情况下,应当通过access_log统计出连续HTTP请求出现的次数、间隔时间、访问了,以确定MaxKeepAliveRequests和KeepAliveTimeout的值。KeepAliveTimeout太小发挥不了持续连接的作用;太大了,持续连接迟迟不断,浪费TCP连接不说,更糟糕的是系统中的httpd进程数目会因此不断增加,使得系统负载升高,甚至会导致服务器失去响应。
但是在处理动态网页请求时,由于用户很少会瞬间请求多个动态网页(一般都是打开页面之后过段时间才会点击),此时,打开KeepAlive无异于浪费TCP连接数。
结论就是,放动态网页的就KeepAlive Off以提高吞吐量,放静态内容如图片、js代码等就KeepAlive On以减少TCP连接建立次数。
但一个Apache只能有一种KeepAlive设置,怎么办?很简单,现在有Nginx,由它负责所有静态文件的处理,后端的Apache只需要专心动态应用就行。
查看KeepAlive是否有效,可以通过curl-I(命令行)获取HTTP爆头查看
如下变两个不同的结果:
HTTP/1.1 200 OK
Date: Thu, 09 Jul 2009 06:58:13 GMT
Server: Apache/2.2.11 (Unix) PHP/5.2.6
Last-Modified: Fri, 03 Jul 2009 10:40:03 GMT
ETag: "163e8b2-d87-46dcac765c6c0"
Accept-Ranges: bytes
Content-Length: 3463
Connection: close 连接断开, KeepAlive 为 off
Content-Type: text/html
#################################
HTTP/1.1 200 OK
Server: nginx/0.6.35
Date: Thu, 09 Jul 2009 06:59:49 GMT
Content-Type: text/html
Content-Length: 1034
Last-Modified: Thu, 28 Aug 2008 17:07:40 GMT
Connection: keep-alive 持续连接, KeepAlive 为 on
Accept-Ranges: bytes
内容学习自开源中国:http://www.oschina.net/question/17_1542