首页 后端开发 php教程 nginx 简介篇

nginx 简介篇

Aug 08, 2016 am 09:21 AM
apache nginx web

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

热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.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Java 并发编程中如何进行并发测试和调试? Java 并发编程中如何进行并发测试和调试? May 09, 2024 am 09:33 AM

并发测试和调试Java并发编程中的并发测试和调试至关重要,以下技术可供使用:并发测试:单元测试:隔离并测试单个并发任务。集成测试:测试多个并发任务之间的交互。负载测试:评估应用程序在高负载下的性能和可扩展性。并发调试:断点:暂停线程执行并检查变量或执行代码。日志记录:记录线程事件和状态。堆栈跟踪:识别异常源头。可视化工具:监视线程活动和资源使用情况。

eclipse如何添加服务器 eclipse如何添加服务器 May 05, 2024 pm 07:27 PM

要将服务器添加到 Eclipse,请执行以下步骤:创建服务器运行时环境配置服务器创建服务器实例选择服务器运行时环境配置服务器实例启动服务器部署项目

算法在 58 画像平台建设中的应用 算法在 58 画像平台建设中的应用 May 09, 2024 am 09:01 AM

一、58画像平台建设背景首先和大家分享下58画像平台的建设背景。1.传统的画像平台传统的思路已经不够,建设用户画像平台依赖数据仓库建模能力,整合多业务线数据,构建准确的用户画像;还需要数据挖掘,理解用户行为、兴趣和需求,提供算法侧的能力;最后,还需要具备数据平台能力,高效存储、查询和共享用户画像数据,提供画像服务。业务自建画像平台和中台类型画像平台主要区别在于,业务自建画像平台服务单条业务线,按需定制;中台平台服务多条业务线,建模复杂,提供更为通用的能力。2.58中台画像建设的背景58的用户画像

如何实施 PHP 安全最佳实践 如何实施 PHP 安全最佳实践 May 05, 2024 am 10:51 AM

如何实施PHP安全最佳实践PHP是最受欢迎的后端Web编程语言之一,用于创建动态和交互式网站。然而,PHP代码可能容易受到各种安全漏洞的攻击。实施安全最佳实践对于保护您的Web应用程序免受这些威胁至关重要。输入验证输入验证是验证用户输入并防止恶意输入(如SQL注入)的关键第一步。PHP提供了多种输入验证函数,例如filter_var()和preg_match()。示例:$username=filter_var($_POST['username'],FILTER_SANIT

如何利用 Kubernetes Operator simplifiy PHP 云端部署? 如何利用 Kubernetes Operator simplifiy PHP 云端部署? May 06, 2024 pm 04:51 PM

KubernetesOperator可简化PHP云端部署,通过以下步骤实现:安装PHPOperator,以便与Kubernetes集群进行交互。部署PHP应用,声明映像和端口。使用命令管理应用,例如获取、描述和查看日志。

Java 网络编程中常用的协议和库有哪些? Java 网络编程中常用的协议和库有哪些? May 09, 2024 pm 06:21 PM

Java网络编程常用协议和库:协议:TCP、UDP、HTTP、HTTPS、FTP库:java.net、java.nio、ApacheHttpClient、Netty、OkHttp

Java数据结构与算法:云计算实战指南 Java数据结构与算法:云计算实战指南 May 09, 2024 am 08:12 AM

云计算中数据结构和算法的使用至关重要,用于管理和处理海量数据。常见的数据结构包括数组、列表、哈希表、树和图。常用的算法有排序算法、搜索算法和图算法。利用Java的强大功能,开发者可以使用Java集合、线程安全数据结构和ApacheCommonsCollections来实现这些数据结构和算法。

PHP 微服务容器化部署全攻略 PHP 微服务容器化部署全攻略 May 08, 2024 pm 05:06 PM

PHP微服务容器化部署全攻略引言微服务架构已成为现代软件开发的热门趋势,它将应用程序分解成独立的、松散耦合的服务。容器化则提供了部署和管理这些微服务的有效方式。本文将提供一个循序渐进的指南,帮助您使用PHPDocker容器化和部署微服务。Docker基础知识Docker是一种轻量级容器化平台,它将应用程序及其所有依赖项打包到一个可移植的容器中。以下步骤介绍了如何使用Docker:#安装Dockersudoapt-getupdatesudoapt-getinstalldock

See all articles