Nginx是俄羅斯人編寫的十分輕量級的HTTP服務器,Nginx,它的發音爲「engine X」, 是一個高性能的HTTP和反向代理服務器,同時也是一個IMAP/POP3/SMTP 代理服務器.Nginx是由俄羅斯人 Igor Sysoev爲俄羅斯訪問量第二的 Rambler.ru站點開發的,它已經在該站點運行超過兩年半了。Igor Sysoev在創建的項目時,使用基於BSD許可。前端
聽說他當初是F5的成員之一,英文主頁:http://nginx.net 。nginx
俄羅斯的一些大網站已經使用它超過兩年多了, 一直表現不凡,相信想了解nginx的朋友都讀過阿葉大哥的利用nginx實現負載均衡.直到2007年4月,俄羅 斯大約有20%左右的虛擬主機是由nignx服務或代理的。Google在線安全博客中統計nginx服務或代理了大約全部Internet虛擬主機的 4%。而netcraft的統計顯示,nginx服務的主機在過去的一年裏以四倍的速度增加。短短的幾年裏,它的排名已躍進第9。(參見:http://survey.netcraft.com/Reports/200707/ )web
Nginx以事件驅動的方式編寫,因此有很是好的性能,同時也是一個很是高效的反向代理、負載平衡。其擁有匹配 Lighttpd的性能,同時尚未Lighttpd的內存泄漏問題,並且Lighttpd的mod_proxy也有一些問題而且好久沒有更新。apache
所以我打算用其替代Apache應用於Linux服務器上。可是Nginx並不支持cgi方式運行,緣由是能夠減小所以帶來的一些程序上的漏洞。那麼咱們必須使用FastCGI方式來執行PHP程序。後端
如今,Igor將源代碼以類BSD許可證的形式發佈。Nginx由於它的穩定性、豐富的模塊庫、靈活的配置和低系統資源的消耗而聞名.業界一致認爲它是 Apache2.2+mod_proxy_balancer的輕量級代替者,不只是由於響應靜態頁面的速度很是快,並且它的模塊數量達到Apache的近 2/3。對proxy
和 rewrite模塊的支持很完全,還支持mod_fcgi、ssl、vhosts ,適合用來作mongrel clusters的前端HTTP響應。緩存
nginx作爲HTTP服務器,有如下幾項基本特性:安全
處理靜態文件,索引文件以及自動索引;打開文件描述符緩衝.
無緩存的反向代理加速,簡單的負載均衡和容錯.
FastCGI,簡單的負載均衡和容錯.
模塊化的結構。包括gzipping, byte ranges, chunked responses,以及 SSI-filter等filter。若是由FastCGI或其它代理服務器處理單頁中存在的多個SSI,則這項處理能夠並行運行,而不須要相互等待。
支持SSL 和 TLSSNI.性能優化
Nginx專爲性能優化而開發,性能是其最重要的考量,實現上很是注重效率 。它支持內核Poll模型,能經受高負載的考驗,有報告代表能支持高達 50,000個併發鏈接數。服務器
Nginx具備很高的穩定性。其它HTTP服務器,當遇到訪問的峯值,或者有人惡意發起慢速鏈接時,也極可能會致使服務器物理內存耗盡頻繁交換,失去響 應,只能重啓服務器。例如當前apache一旦上到200個以上進程,web響應速度就明顯很是緩慢了。而Nginx採起了分階段資源分配技術,使得它的 CPU與內存佔用率很是低。nginx官方表示保持10,000個沒有活動的鏈接,它只佔2.5M內存,因此相似DOS這樣的攻擊對nginx來講基本上 是毫無用處的。就穩定性而言,nginx比lighthttpd更勝一籌。併發
Nginx支持熱部署。它的啓動特別容易, 而且幾乎能夠作到7*24不間斷運行,即便運行數個月也不須要從新啓動。你還可以在不間斷服務的狀況下,對軟件版本進行進行升級。
Nginx採用master-slave模型,可以充分利用SMP的優點,且可以減小工做進程在磁盤I/O的阻塞延遲。當採用select()/poll()調用時,還能夠限制每一個進程的鏈接數。
Nginx代碼質量很是高,代碼很規範,手法成熟, 模塊擴展也很容易。特別值得一提的是強大的Upstream與Filter鏈。 Upstream爲諸如reverse proxy,與其餘服務器通訊模塊的編寫奠基了很好的基礎。而Filter鏈最酷的部分就是各個filter沒必要等待前一個filter執行完畢。它能夠 把前一個filter的輸出作爲當前filter的輸入,這有點像Unix的管線。這意味着,一個模塊能夠開始壓縮從後端服務器發送過來的請求,且能夠在 模塊接收完後端服務器的整個請求以前把壓縮流轉向客戶端。
Nginx採用了一些os提供的最新特性如對sendfile (Linux2.2+),accept-filter (FreeBSD4.1+),TCP_DEFER_ACCEPT (Linux 2.4+)的支持,從而大大提升了性能。
固然,nginx還很年輕,多多少少存在一些問題,好比:Nginx是俄羅斯人建立,目前文檔方面還不是很完善.由於文檔大可能是俄語,因此文檔方面這也是個障礙.儘管nignx的模塊比較多,但它們還不夠完善。對腳本的支持力度不夠。
這些問題,nginx的做者和社區都在努力解決,咱們有理由相信nginx將繼續以高速的增加率來分享輕量級HTTP服務器市場,會有一個更美好的將來。