Nginx淺析

光、夜雨微涼發表於2018-05-23

  Nginx淺析

  • Nginx是什麼

    1. 總的來說,Nginx其實就是一個和apache類似的伺服器軟體。 Nginx是一款輕量級的Web伺服器/反向代理伺服器以及電子郵件代理伺服器,並在一個BSD-like協議下發行。由俄羅斯的程式設計師lgorSysoev所開發,供俄國大型的入口網站及搜尋引擎Rambler使用。其特點是佔有記憶體少,併發能力強,事實上nginx的併發能力確實在同型別的網頁伺服器中表現較好。

    2. Nginx是一個高效能的靜態HTTP伺服器和反向代理伺服器,也是一個IMAP/POP3/SMTP代理伺服器。首先,Nginx是一個高效能的HTTP伺服器。可以將伺服器上的靜態檔案(比如HTML、圖片等)通過HTTP協議展現給客戶端。

    3. Nginx相較於Apache\lighttpd具有佔有記憶體少,穩定性高等優勢,並且依靠併發能力強,豐富的模組庫以及友好靈活的配置而聞名。在Linux作業系統下,nginx使用epoll事件模型,得益於此,nginx在Linux作業系統下效率相當高。同時Nginx在OpenBSD或FreeBSD作業系統上採用類似於Epoll的高效事件模型kqueue。

  • Nginx的應用場景

    1. HTTP伺服器。Nginx是一個靜態HTTP伺服器,可以獨立提供HTTP服務,可以用作網頁靜態伺服器

    2. 虛擬主機。Ngnix可以實現一臺伺服器虛擬出多個網站

    3. 反向代理,負載均衡。當網站的訪問量達到一定程度時,單臺伺服器不能滿足使用者的請求時,就需要多臺伺服器叢集,可以使用Ngnix做反向代理,通過Ngnix將使用者的請求分發給多臺伺服器,這樣,多臺伺服器就可以平均分擔負載,從而實現負載均衡。

  • Nginx的作用

    1. Nginx作為web伺服器的一個重要的功能就是反向代理,當然也可以使用Nginx配置正向代理。網站管理員可以在伺服器和客戶端中間層加上一層Nginx伺服器,客戶端請求Nginx伺服器,Nginx請求應用伺服器,然後將結果返回給客戶端,此時Nginx就是反向代理伺服器。

    2. 當網站的訪問量非常大時,伺服器的壓力也會非常大,這個時候就需要用到伺服器叢集了。通過中間層的Nginx伺服器,將大量的使用者請求分配給多臺伺服器,實現負載均衡。同時帶來的好處是,如果一臺伺服器出現問題,只要其他伺服器正常執行,就不會影響使用者的使用。

    3. 有的網站訪問量大,需要負載均衡,然而並不是所有的網站訪問量都非常大,有的網站訪問量小,需要節省成本,將多個網站部署在同一臺伺服器上,這時可以使用Nginx伺服器虛擬出多個多個域名,使用者通過不同的域名訪問不同的網站,實現虛擬主機的作用

    4. Nginx伺服器本身不支援PHP等語言,但是它可以通過FastCGI來將讓語言編譯器或直譯器或框架處理

  • Nginx和Apache的區別和共同點

    • 共同點:

      1. 都是HTTP伺服器

      2. 功能上都採用模組化結構設計

      3. 都支援通用的語言介面,比如PHP、Python、Perl等等

      4. 都支援正向代理、反向代理、虛擬主機、URL重寫、壓縮傳輸、sssL加密傳輸等

    • 不同點:

      1. Apache處理請求速度很慢,佔用很多記憶體資源

      2. 功能上,Apache所有模組支援動靜態編譯,Nginx的模組都是靜態編譯的

      3. 對FastCGI的支援:Apache不能很好的支援,Nginx支援的非常好

      4. 處理連線方式上:Nginx支援epoll,Apache不支援

  • Nginx的優勢

    1. 作為web伺服器,Nginx處理靜態檔案、索引檔案,自動索引的效率非常高

    2. 作為代理伺服器,Nginx可以實現無快取的反向代理加速,提高網站執行速度

    3. 作為負載均衡伺服器,Nginx既可以實現在內部直接支援Rails和PHP,也可以支援HTTP代理伺服器對外進行服務,同時還支援簡單的容錯和利用演算法進行負載均衡

    4. 在效能方面,Nginx是專門為效能優化開發的,非常注重效率。它採用核心Poll模型,可以支援更多的併發連線,最大支援對5萬個併發連線的相應,而只用佔用很低的記憶體資源

    5. 在穩定性方面,Nginx採用了分階段資源分配技術,使得CPU和內部的佔用率非常低。Nginx保持了1萬個沒有活動的連線,而這些連線只佔用了2.5M的記憶體,因此。類似DOS這樣的攻擊對於Nginx來說基本上是沒有任何作用的

    6. 在高可用性方面,Nginx支援熱部署,啟動速度特別迅速,因此可以不間斷伺服器的情況下,進行版本或配置的升級,Nginx幾乎可以做到不間斷執行。Nginx採用了一些os提供的最新特性如sendfile(Linux2.2+),accept-filter(FreeBSD4.1+),TCP_DEFER_ACCEPT(Linux 2.4+)的支援,從而大大提高了效能。

  • 正向代理和反向代理的區別

    • 反向代理

      客戶端(使用者A)向反向代理的名稱空間(name-space)中的內容傳送普通請求,接著反向代理將判斷向何處(原始伺服器)轉交請求,並將獲得的內容返回給客戶端。而客戶端始終任務它訪問的事原始伺服器B而不是伺服器Z。由於防火牆作用,只允許伺服器Z進出,防火牆和反向代理共同作用保護了資源伺服器B。反向代理對外都是透明的,訪問者並不知道自己訪問的是一個代理。

      反向代理的用途:將防火牆後面的伺服器提供給Internet使用者訪問。反向代理還可以為後端的多臺伺服器提供負載平衡或為後端較慢的伺服器提供緩衝服務。

    • 正向代理

      正向代理是一個位於客戶端A和原始伺服器(伺服器B)之間的伺服器(代理伺服器Z),為了從原始伺服器取得內容,使用者A向代理伺服器Z傳送一個請求並指定目標(伺服器B),然後代理伺服器Z向伺服器B轉交請求並將獲得的內容返回給客戶端。客戶端必須要進行一些特別的設定才能使用正向代理。 正向代理允許客戶端通過它訪問任意網站並且隱藏客戶端自身,因此你必須採取安全措施以確保僅為經過授權的客戶端提供服務。

      正向代理的用途:在防火牆內的區域網客戶端提供訪問Internet的途徑。還可以使用緩衝特性減少網路使用率。