來源:互聯網
上載者:User
關鍵字
PHP
Apache
nginx
Web伺服器
web伺服器
FastCGI
本文是我撰寫的關於搭建「Nginx + PHP(FastCGI)」Web伺服器的第6篇文章。 本系列文章作為國內最早詳細介紹 Nginx + PHP 安裝、配置、使用的資料之一,為推動 Nginx 在國內的發展產生了積極的作用。 第6篇文章主要介紹了Nginx 0.8.x新的平滑重啟方式,將PHP升級到了5.2.14,修正了PEAR問題。 另將MySQL 5.1.x升級到了5.5.x系列,設定檔變更較大。
Nginx ("engine x") 是一個高性能的 HTTP 和反向代理伺服器,也是一個 IMAP/POP3/SMTP 代理伺服器。 Nginx 是由 Igor Sysoev 為俄羅斯訪問量第二的 Rambler.ru 網站開發的,它已經在該網站運行超過三年了。 Igor 將原始程式碼以類BSD許可證的形式發佈。
Nginx 超越 Apache 的高性能和穩定性,使得國內使用 Nginx 作為 Web 服務器的網站也越來越多,其中包括新浪博客、新浪播客、網易新聞、騰訊網、搜狐博客等入口網站頻道,六間房、56.com等視頻分享網站 ,Discuz!官方論壇、水木社區等知名論壇,盛大線上、金山逍遙網等網路遊戲網站,豆瓣、人人網、YUPOO相冊、金山愛詞霸、迅雷線上等新興Web 2.0網站。
在高併發連接的情況下,Nginx是Apache伺服器不錯的替代品。 Nginx同時也可以作為7層負載均衡伺服器來使用。 根據我的測試結果,Nginx 0.8.46 + PHP 5.2.14 (FastCGI) 可以承受3萬以上的併發連接數,相當於同等環境下Apache的10倍。
根據我的經驗,4GB記憶體的伺服器+Apache(prefork模式)一般只能處理3000個併發連接,因為它們將佔用3GB以上的記憶體,還得為系統預留1GB的記憶體。 我曾經就有兩台Apache伺服器,因為在設定檔中設置的MaxClients為4000,當Apache併發連接數達到3800時,導致伺服器記憶體和Swap空間用滿而崩潰。
而這台 Nginx 0.8.46 + PHP 5.2.14 (FastCGI) 伺服器在3萬併發連接下,開啟的10個Nginx進程消耗150M記憶體(15M*10=150M),開啟的64個php-cgi進程消耗1280M記憶體(20M* 64=1280M),加上系統自身消耗的記憶體,總共消耗不到2GB記憶體。 如果伺服器記憶體較小,完全可以只開啟25個php-cgi進程,這樣php-cgi消耗的總記憶體數才500M。
在3萬併發連接下,訪問Nginx 0.8.46 + PHP 5.2.14 (FastCGI) 伺服器的PHP程式,仍然速度飛快。 下圖為Nginx的狀態監控頁面,顯示的活動連接數為28457(關於Nginx的監控頁配置,會在本文接下來所給出的Nginx設定檔中寫明):
我生產環境下的兩台Nginx + PHP5(FastCGI)伺服器,跑多個一般複雜的純PHP動態程式,單台Nginx + PHP5(FastCGI)伺服器跑PHP動態程式的處理能力已經超過「700次請求/秒」, 相當於每天可以承受6000萬(700*60*60*24=60480000)的訪問量,而伺服器的系統負載也不高:
2009年9月3日下午2:30,金山遊戲《劍俠情緣網路版三》臨時維護1小時,大量玩家上官網,論壇、評論、客服等動態應用Nginx伺服器集群, 每台伺服器的Nginx活動連接數達到2.8萬,這是筆者遇到的Nginx生產環境最高併發值。