搜索

Nginx(发音为“engine x)是一款由俄罗斯软件工程师Igor Sysoev写的开源的web服务器。自从2004年发布以来nginx一直关注于高性能、高并发、低内存的使用,另外还有一些特色的Web服务器功能,如负载均衡、缓存、访问和带宽控制以及能够有效的与各种应用集成这些特点使得nginx成为现代网站架构中一个不错的选择。目前,nginx在互联网最受欢迎web服务器软件排行榜上排名第二。

1. 为什么高并发如此重要?

目前互联网是如此普及和无处不在,而我们知道,这在10年前是很难想象的。而且,由于从基于NCAS(译者注:国家超级计算机应用中心)的简单的HTML产生可点击文本到基于Apache web服务的重大演变,使得互联网成为全球2亿网民的常用沟通媒介。随着电脑、移动设备和最近的平板电脑的永久扩散连接,导致互谅网领域变化非常迅速以及整个经济的有线数字化。线上服务也随着生活和娱乐资讯的实时有效而变得更加细致。而且线上业务的安全方面也发生了重大变化。因此网站也变得比以前更加复杂,也就需要更多工程方面的工作使互联网更加健壮以及具有更好的扩展性。

对一个网站架构来说最大的挑战就是并发问题。从网络服务一开始,并发级别就在持续不断的增长。而一个网站同时为成百上千甚至是几百万用户同时服务的情况也并不少见。十年以前,导致并发的原因是客户端慢-当时用户使用ADSL或者拨号上网来连接;如今,并发是由移动客户端和一些需要通过持久连接来更新新闻、推特、朋友消息等的更新应用程序体系结构的组合。另外还一个造成并发增加的因素是现代浏览器同时为一个网站打开46个连接来加载网页以提高页面加载速度。

为了说明客户端慢时存在的问题,假设有一个简单的基于apacheweb服务可以产生一个100k大小的响应文本或者图片,那么这个服务只用花几分之一秒就能生成或者查询出这个页面,但是在一个有80kbps(10kB/s)带宽的客户端中却需要10秒钟来发送这个请求;本来这个web服务可以很快拉到100k的内容,但是却要在花费10秒钟传送完这100k的内容后才能释放这个连接。现在我们假设有1000个同时连接上的客户端来请求相似的内容,如果一个客户端被分配到1M的额外内存,那么为了满足这1000客户端100K的请求则需要1000M(大约1G)的额外内存。实际上,一个基于apache的标准web服务通常要为每个连接分配大于1M的内存,而且可悲的是移动通信的有效速率却仅为数十kpbs。虽然可能通过操作系统内核的socket缓冲在一定程度上可以缓解向比较慢的客户端发送内容的问题,但是总归不是通用的解决办法而且可能有不可预期的负面效果。

在对于持久连接的处理上使得并发问题变得更加突出,这是因为要避免重新创建http连接带来的延迟,客户端要一直保持与web服务器连接而且web服务还要为每个连接分配额外的内存空间。

因此,为了能够并且能够持续性处理随着日益增加的用户量而导致的不断增加的负载以及获得更高的并发性,一个网站必须基于一系列非常高性能的模块来构建。但是,其他部分如硬件(CPU,内存,硬盘)、网络容量、应用程序和数据存储架构显然也是同样重要的,它决定了web服务器可接受和处理的客户端连接数。所以web服务器需要能够通过非线性扩展来满足每秒钟不断增长的并发连接和请求数。

Apache是否合适?

Apache,起源于二十世纪九十年代初,目前仍是互联网上占主导地位的web服务器软件。从2000年开始,很明显的单机web服务很难通过简单的复制来满足不断增长的网络服务。尽管apache为未来开发提供了一个坚实的基础,但它为每个新连接来做一次自我复制的架构并不能满足一个网站非线性扩展的要求。最终,apache成了一个功能齐全、有一系列第三方插件而且几乎普遍普遍适用于任何类型二次开发的网站的web服务器。但是这样重并没有任何好处,而且这样做的缺点是将如此多的功能和工具组合到一个软件中也会增加每个连接的 cpu和内存占用率从而降低软件的可扩展性。

因此,既然服务器硬件、操作系统、网络资源不再是限制网站成长的主要因素,世界各地的开发者们也开始寻求更加有效的方法来运行web服务器。大概在十年前,一位著名软件工程师Daniel Kegel声称“现在对于web服务器来说是时候只是上万并发请求了”而且还预测了我们现在称之为互联网云服务的东西。Kegel的C10K清单里也进行了一些对web服务器最佳状态下并发连接数问题的尝试解决,最终证明nginx是最有效的解决途径。

为了解决C10K清单上同时10000连接数的问题,nginx考虑采用的不同架构方式-一个在并发连接数和每秒请求数都更适合非线性扩展的架构。由于 nginx基于事件模型,所以它并不遵循apache复制每个新的进程或者为每个页面创建单独线程的规则。结果,即使负载的增加,内存和CPU使用率仍然可控,这也使得nginx在一台服务器上通过普通硬件就可以处理数万并发请求。

nginx 第一个版本的发布是为了对基于apache的应用服务器中部署在apache下的静态内容,比如html,css,javascript脚本以及图片可以通过nginx来卸载并发和超时处理。在其发展过程中,nginx通过使用FastCGI、uswgi 或者SCGI协议实现了与第三方应用的集成,而且具有像memcache这样的分布式对象缓存系统。同时还增加了一些有用的功能,例如含有负载均衡机制的反向代理以及缓存等。这些额外的特色功能使nginx成为构建一个基于可伸缩web基础设施的有效工具的组合。

使用nginx时候还有更多优势?

通常高效、高性能的处理大并发请求是nginx最主要的优势,同时,使用nginx还有一些其他好处。

在过去的几年里,网络架构师们已经接受了松耦合的思想并开始从web服务中将应用的基础组件分离出来。然而,之前已经存在的基于 LAMP(Linux,Apache,MYSQL,PHP,Python或者Perl)的网站,现在可能包括不仅仅基于LEMP(E发音为“engine x”)的网站却在实际中越来越经常的需要将web服务器推到基础设施的边缘地带或者需要通过不同的方式将相同的或者一些新的应用以及数据工具整合起来。

对于以上情况来说nginx非常适合,这是因为nginx从应用层到更高效的边缘服务器(译者注:不熟悉的读者可查询边缘服务器)层提供了一些主要功能例如卸载并发、超时处理、SSL(安全套接层)、内容静态化、压缩和缓存、连接数和请求的节流甚至是HTTP流媒体。同时nginx还可以直接和 memcached、Redis以及其他的NoSQL解决方案来提高大并发用户下的性能。

随着最新的开放工具组件和编程语言的流行,越来越多的公司开始改变他们开发和部署应用的习惯。而nginx也已经成为这类改变的典范,发展为最重要的组件之一,同时它也已经帮助许多公司在预算范围内来实现web服务持续快速的发展。

nginx的第一行代码写于2002年,到2004年nginx通过2-two-clause BSD许可协议发布。自从nginx发布以来,它的用户群一直持续增长,并且贡献各种想法以及提交bug、提出各种意见和建议为整个社区提供了非常大的帮助。

nginx 的代码库是原创的,而且完全通过C语言来实现。它也已经被移植到多种架构下的操作系统中,比如Linux, FreeBSD, Solaris, Mac OS X, AIX 和Windows系统。nginx也有自己的库,而且这些库并没有使用系统中不存在的C库,因此,除了zlib、PCRE和OpenSSL这几个库之外,用户可以去掉自己不需要或者可能有许可冲突的库。

这里稍微说一下windows版本的nginx。运行在windows下的nginx更像是一个概念验证而不是一个功能齐全的端口。在windows下 nginx也是有限制的,那就是nginx不能很好的和windows内核兼容,已经知道的低版本的nginx在windows的问题有支持并发数少、性能低、缓存失效以及带宽策略失效。今后,windows版本nginx将更加匹配主流功能。

 

以上就介绍了nginx 简介篇,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
Web Speech API开发者指南:它是什么以及如何工作Web Speech API开发者指南:它是什么以及如何工作Apr 11, 2023 pm 07:22 PM

​译者 | 李睿审校 | 孙淑娟Web Speech API是一种Web技术,允许用户将语音数据合并到应用程序中。它可以通过浏览器将语音转换为文本,反之亦然。Web Speech API于2012年由W3C社区引入。而在十年之后,这个API仍在开发中,这是因为浏览器兼容性有限。该API既支持短时输入片段,例如一个口头命令,也支持长时连续的输入。广泛的听写能力使它非常适合与Applause应用程序集成,而简短的输入很适合语言翻译。语音识别对可访问性产生了巨大的影响。残疾用户可以使用语音更轻松地浏览

如何使用Docker部署Java Web应用程序如何使用Docker部署Java Web应用程序Apr 25, 2023 pm 08:28 PM

docker部署javaweb系统1.在root目录下创建一个路径test/appmkdirtest&&cdtest&&mkdirapp&&cdapp2.将apache-tomcat-7.0.29.tar.gz及jdk-7u25-linux-x64.tar.gz拷贝到app目录下3.解压两个tar.gz文件tar-zxvfapache-tomcat-7.0.29.tar.gztar-zxvfjdk-7u25-linux-x64.tar.gz4.对解

web端是什么意思web端是什么意思Apr 17, 2019 pm 04:01 PM

web端指的是电脑端的网页版。在网页设计中我们称web为网页,它表现为三种形式,分别是超文本(hypertext)、超媒体(hypermedia)和超文本传输协议(HTTP)。

web前端和后端开发有什么区别web前端和后端开发有什么区别Jan 29, 2023 am 10:27 AM

区别:1、前端指的是用户可见的界面,后端是指用户看不见的东西,考虑的是底层业务逻辑的实现,平台的稳定性与性能等。2、前端开发用到的技术包括html5、css3、js、jquery、Bootstrap、Node.js、Vue等;而后端开发用到的是java、php、Http协议等服务器技术。3、从应用范围来看,前端开发不仅被常人所知,且应用场景也要比后端广泛的太多太多。

深入探讨“高并发大流量”访问的解决思路和方案深入探讨“高并发大流量”访问的解决思路和方案May 11, 2022 pm 02:18 PM

怎么解决高并发大流量问题?下面本篇文章就来给大家分享下高并发大流量web解决思路及方案,希望对大家有所帮助!

web前端打包工具有哪些web前端打包工具有哪些Aug 23, 2022 pm 05:31 PM

web前端打包工具有:1、Webpack,是一个模块化管理工具和打包工具可以将不同模块的文件打包整合在一起,并且保证它们之间的引用正确,执行有序;2、Grunt,一个前端打包构建工具;3、Gulp,用代码方式来写打包脚本;4、Rollup,ES6模块化打包工具;5、Parcel,一款速度极快、零配置的web应用程序打包器;6、equireJS,是一个JS文件和模块加载器。

Python轻量级Web框架:Bottle库!Python轻量级Web框架:Bottle库!Apr 13, 2023 pm 02:10 PM

和它本身的轻便一样,Bottle库的使用也十分简单。相信在看到本文前,读者对python也已经有了简单的了解。那么究竟何种神秘的操作,才能用百行代码完成一个服务器的功能?让我们拭目以待。1. Bottle库安装1)使用pip安装2)下载Bottle文件https://github.com/bottlepy/bottle/blob/master/bottle.py2.“HelloWorld!”所谓万事功成先HelloWorld,从这个简单的示例中,了解Bottle的基本机制。先上代码:首先我们从b

ASGI解释:Python Web开发的未来ASGI解释:Python Web开发的未来Apr 12, 2023 pm 10:37 PM

​译者 | 李睿审校 | 孙淑娟Python Web应用程序长期以来一直遵循Web服务器网关接口(WSGI)标准,该标准描述了它们如何与Web服务器通信。WSGI最初于2003年推出,并于2010年更新,仅依赖于Python2.2版本中原生可用的、易于实现的功能。因此, WSGI迅速融入了所有主要的Python Web框架,并成为Python Web开发的基石。快进到2022年。Python2已经过时,Python现在具有处理网络调用等异步操作的原生语法。WSGI和其他默认假定同步行为的标准无法

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具