Nginx + Apache 的優化例子一則

現在慣常使用的 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章