Nginx

Nginx(发音同「」)是异步框架的網頁伺服器,也可以用作反向代理、负载平衡器和HTTP缓存。该软件由俄羅斯程式設計師伊戈爾·賽索耶夫开发,并于2004年首次公开发布[7]。2011年成立同名公司以提供支持服务[8]。2019年3月11日,Nginx公司被F5网络公司以6.7億美元收购[9]

Nginx
原作者伊戈尔·赛索耶夫
開發者NGINX, Inc.
首次发布2004年10月4日2004-10-04[1]
当前版本
  • 1.26.1 (2024年5月29日;穩定版本)[2]
源代码库hg.nginx.org/nginx
github.com/nginx/nginx
操作系统Linux\BSD variantsOS XSolarisAIXHP-UXWindows[3]以及*nix[4]
语言C[5]
类型網頁伺服器郵件伺服器反向代理伺服器
许可协议类BSD[6]
网站nginx.org

Nginx是免费的开源软件,根据类BSD许可证的条款发布。一大部分Web服务器使用Nginx[10],通常作为负载均衡器。[11]

特点

Nginx可以部署在网络上使用FastCGI脚本、SCGI处理程序、WSGI应用服务器或Phusion Passenger模块的动态HTTP内容,并可作为软件负载均衡器。[12]

Nginx使用异步事件驱动的方法来处理请求。Nginx的模块化事件驱动架构[13]可以在高负载下提供更可预测的性能[14]

Nginx是一款面向性能设计的HTTP服务器,相较于Apachelighttpd具有占有内存少,稳定性高等优势。与旧版本(≤2.2)的Apache不同,Nginx不采用每客户机一线程的设计模型,而是充分使用异步逻辑从而削减了上下文调度开销,所以并发服务能力更强。整体采用模块化设计,有丰富的模块库和第三方模块库,配置灵活。在Linux作業系統下,Nginx使用epoll事件模型,得益於此,Nginx在Linux作業系統下效率相當高。同時Nginx在OpenBSD或FreeBSD作業系統上採用類似於epoll的高效事件模型kqueue。

根据Netcraft在2016年11月网络服务器调查[15],Nginx被发现是所有“活跃”站点(被调查站点的18.22%)和百万最繁忙站点(被调查站点的27.83%)中使用次数最多的Web服务器。根据W3Techs的数据,前100万个网站中的37.7%,前10万个网站中的49.7%,以及前10000个网站中的57.0%被使用[16]。据BuiltWith统计,在全球前10000个网站中,有38.2%的网站使用Nginx[17]。维基百科使用Nginx作为其SSL終端代理[18]。从OpenBSD 5.2版本(2012年11月1日)开始,Nginx成为了OpenBSD基础系统的一部分,提供了替代Apache 1.3系统的替代方案[19],但是后来被替换为OpenBSD自己的httpd(8)[20]

可大量并行處理

Nginx在官方測試的結果中,能夠支援五萬個并行連接,而在實際的運作中,可以支援二萬至四萬個并行連接。

与Apache相比

Nginx的编写有一个明确目标就是超越Apache Web服务器的性能[21]。Nginx提供开箱即用的静态文件,使用的内存比Apache少得多,每秒可以处理大约四倍于Apache的请求[22]。 在低并发下Nginx的性能与Apache相当(有时候还低于),但是在高并发下Nginx能保持低资源低消耗高性能。Nginx的优点还包括:高度模块化的设计,模块编写简单,以及配置文件简洁。

这种性能提升的代价是降低了灵活性,例如能够以每个文件为基础覆盖系统范围的访问设置( Apache使用.htaccess文件来完成这个工作,而Nginx并没有内置这样的功能)[23]。以前,向Nginx添加第三方模块需要使用静态链接的模块从源代码重新编译应用程序。在版本 1.9.11 中部分地克服了这一点,增加了动态模块加载。但是,模块仍然必须与Nginx同时编译,而不是所有的模块都与这个系统兼容——有些需要更老的静态链接过程[24]

相比起在Linux下的Nginx,在Windows Server下的Nginx的稳定性较差,而Apache对两者都有较好的支持。[25]

Nginx模块

整体采用模块化设计是Nginx的一个重大特点,甚至http服务器核心功能也是一个模块。旧版本的Nginx的模块是静态的,添加和删除模块都要对Nginx进行重新编译,1.9.11以及更新的版本已经支持动态模块加载。

数据统计

截至2017年3月,中国注册域名总数的9.65%使用Nginx。[26]

截至2018年1月,Nginx服务或者代理了全球30.46%的网站。[27]

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的方式并不可靠,稳定性有待提高。

參考文獻

  1. . [16 May 2017]. (原始内容存档于2016-05-05).
  2. . 2024年5月29日 [2024年5月30日].
  3. . [28 May 2014]. (原始内容存档于2018-01-25).
  4. . [15 October 2011]. (原始内容存档于2018-01-28).
  5. . ohloh.net. [7 March 2013]. (原始内容存档于2012-06-26).
  6. . [18 January 2013]. (原始内容存档于2012-02-07).
  7. Tony Mobily. . Free Software Magazine. 5 January 2012 [18 October 2013]. (原始内容存档于2013-10-19).
  8. . Form D. US Securities and Exchange Commission 17 October 2013. [15 September 2016]. (原始内容存档于2017-11-07).
  9. . [2019-03-12]. (原始内容存档于2019-10-18).
  10. . [2018-01-27]. (原始内容存档于2018-01-27).
  11. . [2018-01-27]. (原始内容存档于2017-10-20).
  12. . [2018-01-27]. (原始内容存档于2015-06-10).
  13. . aosabook.org. [10 June 2015]. (原始内容存档于2018-01-31).
  14. Basic nginx Configuration页面存档备份,存于) by Sam Kleinman; 21 August 2010
  15. . 22 November 2016 [19 December 2016]. (原始内容存档于2018-02-16).
  16. . 19 December 2016 [19 December 2016]. (原始内容存档于2013-02-05).
  17. . 19 December 2016 [19 December 2016]. (原始内容存档于2018-01-28).
  18. . Wikitech.wikimedia.org. 3 October 2011 [3 December 2011].
  19. OpenBSD Upgrade Guide: 5.1 to 5.2页面存档备份,存于), 2012/11/06 15:00:27 sthen
  20. . [2018-01-27]. (原始内容存档于2018-01-27).
  21. . NGINX. 9 October 2015 [28 December 2016]. (原始内容存档于2017-10-30).
  22. . DreamHost. [28 December 2016]. (原始内容存档于2017-12-10).
  23. . HostingAdvice.com. 5 April 2016 [28 December 2016]. (原始内容存档于2018-01-26).
  24. . NGINX. 2016-02-09 [2017-01-13]. (原始内容存档于2017-01-16) (美国英语).
  25. . Hosting Canada. [2019-12-02]. (原始内容存档于2019-11-07).
  26. . [2017-03-02]. (原始内容存档于2017-03-02).
  27. . Netcraft. 2018-01-19 [2018-02-05]. (原始内容存档于2018-01-24).

另请参阅

  • Tengine

外部链接

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.