Nginx + Apache 的优化例子一则

来源:互联网 发布:python url下载文件 编辑:程序博客网 时间:2024/06/04 19:56

现在惯常使用的 Http 服务器配搭是 nginx + apache ,前者负责静态文件的读取,后者负责动态页面的处理。

以往只有 Apache 单独运行的时候,优化往往是一律的,可现在有了 Nginx 的加入,再稍微调整原来 apache 配置的细则,能更加发挥出这2个配搭的性能。

首先是 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报头查看。
如下边2个不同的结果:

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

0 0
原创粉丝点击