Nginx
Nginx(发音同“engine X”)是异步框架的网页服务器,也可以用作反向代理、负载平衡器和HTTP缓存。该软件由俄罗斯程序员伊戈尔·赛索耶夫开发,并于2004年首次公开发布[7]。2011年成立同名公司以提供支持服务[8]。2019年3月11日,Nginx公司被F5网络公司以6.7亿美元收购[9]。
原作者 | 伊戈尔·赛索耶夫 |
---|---|
开发者 | NGINX, Inc. |
首次发布 | 2004年10月4日[1] |
当前版本 |
|
源代码库 | hg github |
操作系统 | Linux\BSD variants、OS X、Solaris、AIX、HP-UX、Windows[3]以及*nix[4] |
语言 | C[5] |
类型 | 网页服务器、邮件服务器、反向代理服务器 |
许可协议 | 类BSD[6] |
网站 | nginx |
Nginx是免费的开源软件,根据类BSD许可证的条款发布。一大部分Web服务器使用Nginx[10],通常作为负载均衡器。[11]
特点
Nginx可以部署在网络上使用FastCGI脚本、SCGI处理程序、WSGI应用服务器或Phusion Passenger模块的动态HTTP内容,并可作为软件负载均衡器。[12]
Nginx使用异步事件驱动的方法来处理请求。Nginx的模块化事件驱动架构[13]可以在高负载下提供更可预测的性能[14]。
Nginx是一款面向性能设计的HTTP服务器,相较于Apache、lighttpd具有占有内存少,稳定性高等优势。与旧版本(≤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的方式并不可靠,稳定性有待提高。[来源请求]
参考文献
- ^ CHANGES. [16 May 2017]. (原始内容存档于2016-05-05).
- ^ Release 1.27.2. 2024年10月2日 [2024年10月22日].
- ^ nginx for Windows. [28 May 2014]. (原始内容存档于2018-01-25).
- ^ Tested OS and platforms. [15 October 2011]. (原始内容存档于2018-01-28).
- ^ The NGINX Open Source Project on Ohloh. ohloh.net. [7 March 2013]. (原始内容存档于2012-06-26).
- ^ Licensing. [18 January 2013]. (原始内容存档于2012-02-07).
- ^ Tony Mobily. Interview with Igor Sysoev, author of Apache's competitor NGINX. Free Software Magazine. 5 January 2012 [18 October 2013]. (原始内容存档于2013-10-19).
- ^ Notice of Exempt Offering of Securities. Form D. US Securities and Exchange Commission 17 October 2013. [15 September 2016]. (原始内容存档于2017-11-07).
- ^ F5收购NGINX. [2019-03-12]. (原始内容存档于2019-10-18).
- ^ 存档副本. [2018-01-27]. (原始内容存档于2018-01-27).
- ^ 存档副本. [2018-01-27]. (原始内容存档于2017-10-20).
- ^ Use nginx for Proxy Services and Software Load Balancing, 11 May 2010, by Sam Kleinman, Linode Library. [2018-01-27]. (原始内容存档于2015-06-10).
- ^ The Architecture of Open Source Applications (Volume 2): nginx. aosabook.org. [10 June 2015]. (原始内容存档于2018-01-31).
- ^ Basic nginx Configuration (页面存档备份,存于互联网档案馆) by Sam Kleinman; 21 August 2010
- ^ November 2016 Web Server Survey. 22 November 2016 [19 December 2016]. (原始内容存档于2018-02-16).
- ^ Usage of web servers broken down by ranking. 19 December 2016 [19 December 2016]. (原始内容存档于2013-02-05).
- ^ Builtwith: nginx Usage Statistics. 19 December 2016 [19 December 2016]. (原始内容存档于2018-01-28).
- ^ Wikitech: HTTPS. Wikitech.wikimedia.org. 3 October 2011 [3 December 2011].[永久失效链接]
- ^ OpenBSD Upgrade Guide: 5.1 to 5.2 (页面存档备份,存于互联网档案馆), 2012/11/06 15:00:27 sthen
- ^ Heads Up: Nginx Removed From Base. [2018-01-27]. (原始内容存档于2018-01-27).
- ^ NGINX vs. Apache: Our View of a Decade-Old Question. NGINX. 9 October 2015 [28 December 2016]. (原始内容存档于2017-10-30).
- ^ Web server performance comparison. DreamHost. [28 December 2016]. (原始内容存档于2017-12-10).
- ^ NGINX vs. Apache (Pro/Con Review, Uses, & Hosting for Each) - HostingAdvice.com. HostingAdvice.com. 5 April 2016 [28 December 2016]. (原始内容存档于2018-01-26).
- ^ Introducing Dynamic Modules in NGINX 1.9.11 - NGINX. NGINX. 2016-02-09 [2017-01-13]. (原始内容存档于2017-01-16) (美国英语).
- ^ Choosing Between Apache and NGINX for Your Web Hosting Needs. Hosting Canada. [2019-12-02]. (原始内容存档于2019-11-07).
- ^ 存档副本. [2017-03-02]. (原始内容存档于2017-03-02).
- ^ January 2018 Web Server Survey. Netcraft. 2018-01-19 [2018-02-05]. (原始内容存档于2018-01-24).