1. 程式人生 > >LNMP架構五(Nginx介紹)

LNMP架構五(Nginx介紹)

五、Nginx介紹

1、Nginx的產生

沒有聽過Nginx?那麼一定聽過它的“同行”Apache吧!Nginx同Apache一樣都是一種WEB伺服器。基於REST架構風格,以統一資源描述符(Uniform Resources Identifier)URI或者統一資源定位符(Uniform Resources Locator)URL作為溝通依據,通過HTTP協議提供各種網路服務。

然而,這些伺服器在設計之初受到當時環境的侷限,例如當時的使用者規模,網路頻寬,產品特點等侷限並且各自的定位和發展都不盡相同。這也使得各個WEB伺服器有著各自鮮明的特點。

Apache的發展時期很長,而且是毫無爭議的世界第一大伺服器。它有著很多優點:穩定、開源、跨平臺等等

。但是由於它出現的時間太長了。它興起的年代,網際網路產業遠比不上現在。所以它被設計為一個重量級的,不支援高併發的伺服器在Apache上執行數以萬計的併發訪問,會導致伺服器消耗大量記憶體;作業系統對其進行程序或執行緒間的切換也消耗了大量的CPU資源;導致HTTP請求的平均響應速度降低。

這些都決定了Apache不可能成為高效能WEB伺服器,輕量級高併發伺服器Nginx就應運而生了。

俄羅斯的工程師Igor Sysoev,他在為Rambler Media工作期間,使用C語言開發了Nginx。Nginx作為WEB伺服器一直為Rambler Media提供出色而又穩定的服務。

然後呢,Igor Sysoev將Nginx程式碼開源,並且賦予自由軟體許可證。

由於:

  • Nginx使用基於事件驅動架構,使得其可以支援數以百萬級別的TCP連線
  • 高度的模組化和自由軟體許可證是的第三方模組層出不窮(這是個開源的時代啊~)
  • Nginx是一個跨平臺伺服器,可以執行在Linux, FreeBSD, Solaris, AIX, Mac OS, Windows等作業系統上
  • 這些優秀的設計帶來的極大的穩定性。

所以,Nginx火了!

2、Nginx的用武之地

(1)、正向代理

(2)、反向代理

(3)、負載均衡

 

3、Nginx與Apache的比較

     Nginx是俄羅斯人編寫的十分輕量級的HTTP伺服器,Nginx,它的發音為 “engine X”

, 是一個高效能的HTTP和反向代理伺服器,同時也是一個IMAP/POP3/SMTP 代理伺服器.
     為什麼Nginx的效能要比Apache高得多?這得益於Nginx使用了最新的epoll(Linux 2.6核心)和kqueue(freebsd)網路I/O模型,而Apache則使用的是傳統的select模型。目前Linux下能夠承受高併發訪問的 Squid、Memcached都採用的是epoll網路I/O模型。處理大量的連線的讀寫,Apache所採用的select網路I/O模型非常低效。

      下面用一個比喻來解析Apache採用的select模型和Nginx採用的epoll模型進行之間的區別:假設你在大學讀書,住的宿舍樓有很多間房間,你的朋友要來找你。select版宿管大媽就會帶著你的朋友挨個房間去找,直到找到你為止。而epoll版 宿管大媽會先記下每位同學的房間號,你的朋友來時,只需告訴你的朋友你住在哪個房間即可,不用親自帶著你的朋友滿大樓找人。如果來了10000個人,都要 找自己住這棟樓的同學時,select版和epoll版宿管大媽,誰的效率更高,不言自明。同理,在高併發伺服器中,輪詢I/O是最耗時間的操作之一,select和epoll的效能誰的效能更高,同樣十分明瞭。
     在高併發連線的情況下,Nginx是Apache伺服器不錯的替代品。Nginx同時也可以作為7層負載均衡伺服器來使用。Nginx 0.8.46 + PHP 5.2.14 (FastCGI) 可以承受3萬以上的併發連線數,相當於同等環境下Apache的10倍。

 

4、 幾種常用web伺服器對比