Nginx
開放原始碼的網路伺服器與反向代理伺服器 来自维基百科,自由的百科全书
Nginx(發音同「engine X」)是異步框架的網頁伺服器,也可以用作反向代理、負載平衡器和HTTP緩存。該軟件由俄羅斯程式設計師伊戈爾·賽索耶夫開發,並於2004年首次公開發布[8]。2011年成立同名公司以提供支持服務[9]。2019年3月11日,Nginx公司被F5網絡公司以6.7億美元收購[10]。
Nginx是免費的開源軟件,根據類BSD許可證的條款發布。一大部分Web服務器使用Nginx[11],通常作為負載均衡器。[12]
特點
Nginx可以部署在網絡上使用FastCGI腳本、SCGI處理程序、WSGI應用服務器或Phusion Passenger模塊的動態HTTP內容,並可作為軟件負載均衡器。[13]
Nginx使用異步事件驅動的方法來處理請求。Nginx的模塊化事件驅動架構[14]可以在高負載下提供更可預測的性能[15]。
Nginx是一款面向性能設計的HTTP服務器,相較於Apache、lighttpd具有占有內存少,穩定性高等優勢。與舊版本(≤2.2)的Apache不同,Nginx不採用每客戶機一線程的設計模型,而是充分使用異步邏輯從而削減了上下文調度開銷,所以並發服務能力更強。整體採用模塊化設計,有豐富的模塊庫和第三方模塊庫,配置靈活。在Linux作業系統下,Nginx使用epoll事件模型,得益於此,Nginx在Linux作業系統下效率相當高。同時Nginx在OpenBSD或FreeBSD作業系統上採用類似於epoll的高效事件模型kqueue。
根據Netcraft在2016年11月網絡服務器調查[16],Nginx被發現是所有「活躍」站點(被調查站點的18.22%)和百萬最繁忙站點(被調查站點的27.83%)中使用次數最多的Web服務器。根據W3Techs的數據,前100萬個網站中的37.7%,前10萬個網站中的49.7%,以及前10000個網站中的57.0%被使用[17]。據BuiltWith統計,在全球前10000個網站中,有38.2%的網站使用Nginx[18]。維基百科使用Nginx作為其SSL終端代理[19]。從OpenBSD 5.2版本(2012年11月1日)開始,Nginx成為了OpenBSD基礎系統的一部分,提供了替代Apache 1.3系統的替代方案[20],但是後來被替換為OpenBSD自己的httpd(8)[21]。
Nginx在官方測試的結果中,能夠支援五萬個並行連接,而在實際的運作中,可以支援二萬至四萬個並行連接。[來源請求]
與Apache相比
Nginx的編寫有一個明確目標就是超越Apache Web服務器的性能[22]。Nginx提供開箱即用的靜態文件,使用的內存比Apache少得多,每秒可以處理大約四倍於Apache的請求[23]。 在低並發下Nginx的性能與Apache相當(有時候還低於),但是在高並發下Nginx能保持低資源低消耗高性能。Nginx的優點還包括:高度模塊化的設計,模塊編寫簡單,以及配置文件簡潔。
這種性能提升的代價是降低了靈活性,例如能夠以每個文件為基礎覆蓋系統範圍的訪問設置( Apache使用.htaccess文件來完成這個工作,而Nginx並沒有內置這樣的功能)[24]。以前,向Nginx添加第三方模塊需要使用靜態鏈接的模塊從源代碼重新編譯應用程序。在版本 1.9.11 中部分地克服了這一點,增加了動態模塊加載。但是,模塊仍然必須與Nginx同時編譯,而不是所有的模塊都與這個系統兼容——有些需要更老的靜態鏈接過程[25]。
相比起在Linux下的Nginx,在Windows Server下的Nginx的穩定性較差,而Apache對兩者都有較好的支持。[26]
Nginx模塊
整體採用模塊化設計是Nginx的一個重大特點,甚至http服務器核心功能也是一個模塊。舊版本的Nginx的模塊是靜態的,添加和刪除模塊都要對Nginx進行重新編譯,1.9.11以及更新的版本已經支持動態模塊加載。[來源請求]
數據統計
截至2017年3月,中國註冊域名總數的9.65%使用Nginx。[27]
截至2018年1月,Nginx服務或者代理了全球30.46%的網站。[28]
PHP整合
自PHP-5.3.3起,PHP-FPM加入到了PHP核心,編譯時加上--enable-fpm
即可提供支持。PHP-FPM以守護進程在後台運行,Nginx響應請求後,自行處理靜態請求,PHP請求則經過fastcgi_pass交由PHP-FPM處理,處理完畢後返回。Nginx和PHP-FPM的組合,是一種穩定、高效的PHP運行方式,效率要比傳統的Apache和mod_php高出不少。
PHP-FPM不支持Windows平台,由於沒有fastcgi進程管理器管理php-cgi.exe
,因此一旦php-cgi.exe
崩潰退出,前端將失去響應,這時Nginx會返回「The page you are looking for is temporarily unavailable. Please try again later.」的錯誤信息。因此在Windows上用Nginx和php-cgi.exe
組合來運行PHP的方式並不可靠,穩定性有待提高。[來源請求]
參考文獻
另請參閱
外部連結
Wikiwand - on
Seamless Wikipedia browsing. On steroids.