搜索

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
高流量网站的PHP性能调整高流量网站的PHP性能调整May 14, 2025 am 12:13 AM

TheSecretTokeEpingAphp-PowerEdwebSiterUnningSmoothlyShyunderHeavyLoadInVolvOLVOLVOLDEVERSALKEYSTRATICES:1)emplactopCodeCachingWithOpcachingWithOpCacheToreCescriptexecution Time,2)使用atabasequercachingCachingCachingWithRedataBasEndataBaseLeSendataBaseLoad,3)

PHP中的依赖注入:初学者的代码示例PHP中的依赖注入:初学者的代码示例May 14, 2025 am 12:08 AM

你应该关心DependencyInjection(DI),因为它能让你的代码更清晰、更易维护。1)DI通过解耦类,使其更模块化,2)提高了测试的便捷性和代码的灵活性,3)使用DI容器可以管理复杂的依赖关系,但要注意性能影响和循环依赖问题,4)最佳实践是依赖于抽象接口,实现松散耦合。

PHP性能:是否可以优化应用程序?PHP性能:是否可以优化应用程序?May 14, 2025 am 12:04 AM

是的,优化papplicationispossibleandessential.1)empartcachingingcachingusedapcutorediucedsatabaseload.2)优化的atabaseswithexing,高效Quereteries,and ConconnectionPooling.3)EnhanceCodeWithBuilt-unctions,避免使用,避免使用ingglobalalairaiables,并避免使用

PHP性能优化:最终指南PHP性能优化:最终指南May 14, 2025 am 12:02 AM

theKeyStrategiestosiminificallyBoostphpapplicationPermenCeare:1)useOpCodeCachingLikeLikeLikeLikeLikeCacheToreDuceExecutiontime,2)优化AtabaseInteractionswithPreparedStateTemtStatementStatementSandProperIndexing,3)配置

PHP依赖注入容器:快速启动PHP依赖注入容器:快速启动May 13, 2025 am 12:11 AM

aphpdepentioncontiveContainerIsatoolThatManagesClassDeptions,增强codemodocultion,可验证性和Maintainability.itactsasaceCentralHubForeatingingIndections,因此reducingTightCightTightCoupOulplingIndeSingantInting。

PHP中的依赖注入与服务定位器PHP中的依赖注入与服务定位器May 13, 2025 am 12:10 AM

选择DependencyInjection(DI)用于大型应用,ServiceLocator适合小型项目或原型。1)DI通过构造函数注入依赖,提高代码的测试性和模块化。2)ServiceLocator通过中心注册获取服务,方便但可能导致代码耦合度增加。

PHP性能优化策略。PHP性能优化策略。May 13, 2025 am 12:06 AM

phpapplicationscanbeoptimizedForsPeedAndeffificeby:1)启用cacheInphp.ini,2)使用preparedStatatementSwithPdoforDatabasequesies,3)3)替换loopswitharray_filtaray_filteraray_maparray_mapfordataprocrocessing,4)conformentnginxasaseproxy,5)

PHP电子邮件验证:确保正确发送电子邮件PHP电子邮件验证:确保正确发送电子邮件May 13, 2025 am 12:06 AM

phpemailvalidation invoLvesthreesteps:1)格式化进行regulareXpressecthemailFormat; 2)dnsvalidationtoshethedomainhasavalidmxrecord; 3)

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脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器