Nginx簡介–nginx系列之一

友弟發表於2018-02-05

什麼是HTTP伺服器?

HTTP伺服器的基本功能就是提供Web資訊瀏覽服務。它只需支援HTTP協議、HTML文件格式及URL。與客戶端的網路瀏覽器配合。因為Web伺服器主要支援的協議就是HTTP,所以通常情況下HTTP伺服器和WEB伺服器是相等的(有沒有支援除HTTP之外的協議的web伺服器)。目前常見的http伺服器以及市場份額如下圖:

什麼是Nginx

Nginx是俄羅斯人編寫的十分輕量級的HTTP伺服器,Nginx,它的發音為“engine X”,是一個高效能的HTTP和反向代理伺服器,同時也是一個IMAP / POP3 / SMTP代理伺服器。由俄羅斯人Igor Sysoev為俄羅斯訪問量第二的Rambler.ru站點開發的,它已經在該站點執行超過兩年半了.Igor Sysoev在建立的專案時,使用基於BSD許可。

英文主頁:http://nginx.net

到2013年,目前有很多國內網站採用Nginx作為Web伺服器,如國內知名的新浪,163,騰訊,Discuz,豆瓣等。據netcraft統計,Nginx排名第3,約佔15%的份額(參見:http: //news.netcraft.com/archives/category/web-server-survey/

Nginx以事件驅動的方式編寫,所以有非常好的效能,同時也是一個非常高效的反向代理,負載平衡。其擁有匹配Lighttpd的效能,同時還沒有Lighttpd的記憶體洩漏問題,而且Lighttpd的mod_proxy也有一些問題並且很久沒有更新。

現在,Igor將原始碼以類BSD許可證的形式釋出.Nginx因為它的穩定性,豐富的模組庫,靈活的配置和低系統資源的消耗而聞名。業界一致認為它是Apache2.2 + mod_proxy_balancer的輕量級代替者,不僅是因為響應靜態頁面的速度非常快,而且它的模組數量達到Apache的近2/3。對代理和重寫模組的支援很徹底,還支援mod_fcgi,ssl,vhosts,適合用來做雜種群的前端HTTP響應。

Nginx 特點

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 是俄羅斯人建立,雖然前幾年文件比較少,但是目前文件方面比較全面,英文資料居多,中文的資料也比較多,而且有專門的書籍和資料可供查詢。

後續內容繼續更新….


相關文章